我在用pythonnet加载用c#生成的Dll类时遇到了问题
下面是dll项目配置(VS)

这是类代码
using System;
namespace ClassLibrary1
{
public class Class1{
public void test()
{
Console.WriteLine("Hello from a library");
}
}
}这是dll信息

还有剧本
import clr
clr.AddReference('ClassLibraryAss')
from ClassLibraryAss import Class1
x = Class1()
x.test()能够找到程序集。我学习了一些例子,这再难不过了。
这是输出
Traceback (most recent call last):
File ".\testDLL.py", line 23, in <module>
from ClassLibraryAss import Class1
ModuleNotFoundError: No module named 'ClassLibraryAss'我尝试了不同的方式加载模块,但没有成功。
环境
发布于 2021-07-08 02:56:33
在from XXX import Class1 XXX中,应该是Class1驻留的名称空间,而不是DLL名称。
发布于 2021-07-08 04:51:32
事实证明,dll是在.net内核中创建的,而pythonnet在默认情况下并不适用于此。
因此,使用.net框架创建dll是可行的。在这一期文章中,我说了一种用运行这个程序的方法,但我没有尝试。
import clr
#I made a dll with .net Framework 4.8 called ClassLibraryNetF
from ClassLibraryNetF import Class1
x = Class1()
x.test()发布于 2022-06-03 18:27:51
对于在调试类似问题时遇到此问题的任何人,如果脚本是作为模块运行的,pythonnet将无法正确加载程序集,例如python -m Package.Module和您将程序集文件夹添加到sys.path中
sys.path.append(os.path.join(os.getcwd(), "Assemblies"))
clr.AddReference("MyAssembly")
import MyAssembly
from MyAssembly import SimpleClass不知道为什么,但是最新版本在Win 10上复制了这个版本,python3.9。可能与pythonnet处理模块的方式有关。
如果您将它作为脚本从它的文件夹(python Module.py)运行,它可以正常工作。
https://stackoverflow.com/questions/68289729
复制相似问题