添加对名称和命名空间中包含点的.net程序集的引用

Art*_*kov 4 .net python .net-assembly python.net

我试图引用在命名空间中有点的程序集.

sys.path.append(assemblyPath)

clr.FindAssembly(r"isc.Eng.Hov")
clr.AddReference(r"isc.Eng.Hov")

print 'isc.Eng.Hov' in clr.ListAssemblies(False)

from isc.Eng.Hov import *
Run Code Online (Sandbox Code Playgroud)

口译员提出错误:

Traceback (most recent call last):
True
  File "/mnt/86f8c6c8-9099-4f32-be68-486a12918546/GoogleDrive/__BACKLOG/RMK_API_LIB/rmkSuppliersDLLswrappers/scr/Hoval/__phex_hoval_dllwrapper.py", line 14, in <module>
    from isc.Eng.Hov import *
ImportError: No module named isc.Eng.Hov
Run Code Online (Sandbox Code Playgroud)

如何排除故障?

Art*_*kov 5

解决方案是使用ILSPY来调查DLL并找到依赖项(右键单击每个DLL的递归,然后单击添加依赖项).然后我将所有依赖项复制到主DLL所在的同一文件夹中.之后,我跑了:

print [a for a in clr.ListAssemblies(False)
Run Code Online (Sandbox Code Playgroud)

并获取实际涉及的依赖项列表:

u'isc.Eng.Hov', u'Microsoft.VisualBasic', u'System.Windows.Forms', u'System.Drawing', u'Accessibility'
Run Code Online (Sandbox Code Playgroud)

并将它们留在文件夹中.这样做之后的部分代码:

sys.path.append(assemblyPath)

clr.AddReference("isc.Eng.Hov")

import isc.Eng.Hov as isk
from isk import *
Run Code Online (Sandbox Code Playgroud)

开始工作了.

谢谢大家,特别是@denfromufa的帮助!

  • 您说根本原因是由于缺少依赖性而无法加载程序集.但你没有得到任何例外或任何事情来表明这一点.因此,Python.NET可以在这里看到一些改进. (2认同)