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



这个问题与我无法分享的合理数据有关,但问题很简单。我正在研究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?

您必须尝试使用最新版本的pythonnet,您可以使用链接从github获得 https://github.com/pythonnet/pythonnet/wiki/Installation

我相信这将起作用,因为我使用的是python版本3.8.8

Pythonnet 使用 NAMESPACES 作为模块。不是类或任何东西。它们是clr的子模块.

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

我发现它可能取决于.NET框架版本。

在这种情况下:

  • 蟒蛇 3.8.10
  • pythonnet 2.5.2

类库的目标框架:

.NET 标准 1.0、
  • 1.6、2.0:工作正常
  • .NET 标准 2.1:失败

使用计算 DLL 示例进行测试: https://github.com/pythonnet/pythonnet/wiki/How-to-call-a-dynamic-library

最新更新