带有C#DLL的Python CLR模块 - AddReference工作,导入不

时间:2017-07-11 12:46:35

标签: python .net pycharm clr python.net

这个问题与我无法分享的合理数据有关,但问题非常简单。我正在研究PyCharm 2017.1.2,python 2.7.13。

我有一个特定格式的文件(一种加密的XML,不可解析的),需要转换为Excel来修改某些值,然后将其导出回原始格式。出于某些安全原因,我无法绕过这种转换。好的,我有一个Excel加载项,我可以使用它,在两个C#DLL中,它“导入”到Excel格式并将其“导出”回奇怪的XML。

我不能使用IronPython,因为我正在设计的软件使用的文件IronPython无法管理,所以我坚持使用旧的Python 2.7。

我目前正在使用pythonnet的clr模块将DLL导入我的软件。导入代码(不合理)如下所示:

import clr
import sys

sys.path.append('C:/My/Path/To/The/DLLs/Folder')
clr.AddReference('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
clr.AddReference('My.ClassLib.DLL')
clr.AddReference('My.ExcelImportExport.DLL')

import Microsoft.Office.Interop.Excel as Excel
try:
    from My.ClassLib.DLL import XMLParser
    import My.ExcelImportExport.DLL
    from My.ExcelImportExport.DLL import DeviceSettingsUtility
except Exception, e:
    print unicode(e)

我正在使用的两个DLL都位于同一个文件夹中。 CLR添加DLL引用没有问题。

有什么奇怪的:'My.ClassLib.DLL'一切正常:我可以毫无问题地访问它的类和方法。 但是一旦我尝试import My.ExcelImportExport.DLL或之后的行,我就有ImportError: No module named My.ExcelImportExport.DLL。在使用clr添加引用后,我列出了所有程序集,我看到了My.ClassLib.DLLMy.ExcelImportExport.DLL,因此问题不会来自此处。问题来自My.ExcelImportExport.DLL

我用反编译器看了两个DLL,但没有找到任何使ClassLib.DLL工作的东西,并解释了为什么另一个没有。

最后,我的问题:在DLL(C#代码)中需要什么才能导入clr?

1 个答案:

答案 0 :(得分:0)

Pythonnet使用名称空间作为模块。没有课程或任何东西。它们是clr的子模块。

import clr
clr.System.Console.WriteLine("foo.bar.baz")