Ann*_*nie 13 .net python interop python-c-api python.net
我正在使用CPython而且我有一个C#dll.我正在尝试使用Python for .NET来让他们说话.我不能使用IronPython,因为我需要将它集成到现有的CPython系统中.
我是Python for .NET的新手,我实际上对Python的经验很少,而且没有使用C#的经验.如果我的问题看起来很基本,请原谅我.
我正在使用Python 2.7.3,我下载了pythonnet-2.0-alpha2-clr2.0_131_py27_UCS2并将其解压缩到名为pyfornet_test的文件夹中,该文件夹还包含我正在尝试使用的dll(称为DotNet4Class.dll)
然后我运行这个:
import sys
import os
import clr
sys.path.append(r"C:\pyfornet_test")
clr.AddReference("DotNet4Class.dll")
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
System.IO.FileNotFoundException: Unable to find assembly 'DotNet4Class.dll'.
at Python.Runtime.CLRModule.AddReference(String name) in C:\Users\Barton\Documents\Visual Studio 2008\Projects\PyShar
p\trunk\pythonnet\src\runtime\moduleobject.cs:line 375
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.谢谢!
小智 10
试试这个(没有扩展名.dll):
clr.AddReference(r"C:\pyfornet_test\DotNet4Class")
Run Code Online (Sandbox Code Playgroud)
是DotNet4Class.dll针对.NET 4构建的吗?我假设基于dll的命名.
请注意这里的问题:http://sourceforge.net/tracker/?func = detail&aid = 3293169&group_id = 162464 &atid = 823891
使用.NET 4.0生成程序集时,clr.AddReference失败 - ID:3293169
我已经阅读了解决方案,但实质上,您需要在.NET 4下重建并重新编译.NET项目的python.
我还要提到像这样的项目,这些项目并没有被很多人积极开发和使用,它们通常具有微妙的特性,这些特性使得平台的知识对解决诸如此类的问题至关重要.听起来你正试图破解这个解决方案而不了解python或.NET总是会遇到问题.
我有这样的代码(我将 MyRightClickMenuService.dll 复制到与我的 .dll 相同的目录中script.py)。它是针对 .Net 4.0 构建的。
# script.py
import clr
import os
import sys
sys.path.append(os.path.dirname(__file__))
clr.AddReference('MyRightClickMenuService')
clr.AddReference('System')
clr.AddReference('System.Security')
from MyRightClickMenuService import (
AclSecuredNamedPipeBinding,
MyMenuItem,
MyContextMenuService,
etc
)
Run Code Online (Sandbox Code Playgroud)
你试过 clr.FindAssembly 吗?
import clr
import sys
assemblydir = r"C:\pyfornet_test"
assemblypath = r"C:\pyfornet_test\DotNet4Class.dll"
sys.path.append(assemblydir)
clr.FindAssembly(assemblypath)
Run Code Online (Sandbox Code Playgroud)
我不知道它为什么有效,但此代码在我的计算机上有效(Python 2.7、.NET4)