问题描述
在引用NET
异常Python.NET
的情况下,引用位于共享驱动器上的FileNotFoundException
动态链接库时。示例代码:
import sys
import clr
sys.path.append(PATH_TO_SHARED_NETWORK_DRIVE)
clr.AddReference('MY_DLL')
经过一番谷歌搜索后,我发现真正的问题是.NET Framework
默认情况下未启用CAS策略。因此,要在共享驱动器上引用dll,需要启用loadFromremoteSources
开关。示例代码:
from clr import System
from System import Reflection
Reflection.Assembly.LoadFrom(FULL_PATH_TO_MY_DLL.dll)
例外:
System.NotSupportedException:尝试加载程序集 从可能导致装配被定位的网络位置 .NET Framework早期版本中的沙箱。此版本 .NET Framework默认情况下不启用CAS策略,因此此负载 可能很危险。如果不打算将此负载沙箱化, 程序集,请启用loadFromremoteSources开关。看到 http://go.microsoft.com/fwlink/?LinkId=155569以获得更多信息。
问题是我不知道如何从Python启用loadFromremoteSources
切换。
解决方法
显然,设置此设置的唯一方法是通过app.config并使用您提供的链接中的内容:
<configuration>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration>
首先,尝试在与python.exe相同的文件夹中创建具有上述内容的python.exe.config文件。如果仍然不能解决问题,那么python.net的用处就会减少,因为您必须创建一个实际的.NET库,并将其本地引用该远程dll并从那里代理您的调用。我认为这应该可以,但是我还没有尝试过。
您确定您确实需要引用远程主机上的dll吗?也许重新定义问题会更好?