首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pythonnet:无法访问dll类

Pythonnet:无法访问dll类
EN

Stack Overflow用户
提问于 2021-07-07 16:24:31
回答 3查看 823关注 0票数 0

我在用pythonnet加载用c#生成的Dll类时遇到了问题

下面是dll项目配置(VS)

这是类代码

代码语言:javascript
复制
using System;

namespace ClassLibrary1
{
    public class Class1{   
        public void test()
        {
            Console.WriteLine("Hello from a library");
        }
    }
}

这是dll信息

还有剧本

代码语言:javascript
复制
import clr
clr.AddReference('ClassLibraryAss')
from ClassLibraryAss import Class1
x = Class1()
x.test()

能够找到程序集。我学习了一些例子,这再难不过了。

这是输出

代码语言:javascript
复制
Traceback (most recent call last):
  File ".\testDLL.py", line 23, in <module>
    from ClassLibraryAss import Class1
ModuleNotFoundError: No module named 'ClassLibraryAss'

我尝试了不同的方式加载模块,但没有成功。

环境

  • Pythonnet版本: 2.5.2 (也尝试了2.5.1)
  • Python版本: 3.8.0
  • 操作系统: Windows 10
  • 视听演播室2019 (我没有尝试其他)
EN

回答 3

Stack Overflow用户

发布于 2021-07-08 02:56:33

from XXX import Class1 XXX中,应该是Class1驻留的名称空间,而不是DLL名称。

票数 0
EN

Stack Overflow用户

发布于 2021-07-08 04:51:32

事实证明,dll是在.net内核中创建的,而pythonnet在默认情况下并不适用于此。

根据这个问题

因此,使用.net框架创建dll是可行的。在这一期文章中,我说了一种用运行这个程序的方法,但我没有尝试。

代码语言:javascript
复制
import clr
#I made a dll with .net Framework 4.8 called ClassLibraryNetF 
from ClassLibraryNetF import Class1

x = Class1()
x.test()
票数 0
EN

Stack Overflow用户

发布于 2022-06-03 18:27:51

对于在调试类似问题时遇到此问题的任何人,如果脚本是作为模块运行的,pythonnet将无法正确加载程序集,例如python -m Package.Module和您将程序集文件夹添加到sys.path

代码语言:javascript
复制
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)运行,它可以正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68289729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档