Python for .NET

use*_*816 6 .net c# python dll python.net

我在使用Python通过Python for .NET加载外部DLL时遇到问题.我已经尝试了stackoverflow之后的类似方法.我将尝试总结情况并描述我所做的所有步骤.

我有一个以例如Test.NET.dll命名的dll.我查看了dotPeek,我可以看到,点击它,x64和.NET Framework v4.5.在我的计算机上,我安装了.Net Framework 4.

我还以不同的方式安装了Python for .NET.我认为最好的是从这个网站LINK下载.whl .我已经下载并安装了:pythonnet-2.0.0.dev1-cp27-none-win_amd64.whl.我可以想象它将适用于.NET 4.0,因为需要Microsoft .NET Framework 4.0.

一旦我安装了所有东西,我就可以执行以下命令:

>>> import clr
>>> import System
>>> print System.Environmnet.Version
>>> print System.Environment.Version
4.0.30319.34209
Run Code Online (Sandbox Code Playgroud)

看起来很有效.然后,我试图加载我的DLL键入这些命令:

>>> import clr
>>> dllpath= r'C:\Program Files\API\Test.NET'
>>> clr.AddReference(dllpath)

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    clr.AddReference(dllpath)
FileNotFoundException: Unable to find assembly 'C:\Program Files\API\Test.NET'.
   at Python.Runtime.CLRModule.AddReference(String name)
Run Code Online (Sandbox Code Playgroud)

我还尝试在路径的末尾添加".dll",但没有任何改变.然后,我也尝试了LINK,LINK,LINK等等中描述的不同解决方案....不幸的是,它不起作用,我得到了不同的错误.我知道存在IronPython但我试图避免使用它.

谢谢你的帮助!

小智 1

Test.NET.dll 是否来自另一台计算机?根据线程,.NET 的某些安全功能可能会阻止 .dll 正常加载。

要获得更详细的错误消息,请尝试

> from clr import System
> from System import Reflection
> full_filename = r'C:\Program Files\API\Test.NET'
> Reflection.Assembly.LoadFile(dllpath)
Run Code Online (Sandbox Code Playgroud)

如果您收到类似以下内容的错误消息

NotSupportedException: An attempt was made to load an assembly from a 
network location which would have caused the assembly to be sandboxed in 
previous versions of the .NET Framework. This release of the .NET Framework 
does not enable CAS policy by default, so this load may be dangerous. If 
this load is not intended to sandbox the assembly, please enable the 
loadFromRemoteSources switch.
Run Code Online (Sandbox Code Playgroud)

然后以下内容为我解决了问题:

  • 右键单击 Test.NET.dll
  • 选择“属性”
  • 在“常规”选项卡下,单击“取消阻止”
  • 点击“应用”