Python for .NET"无法找到程序集"错误

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)

任何建议将不胜感激.谢谢!

Abh*_*nha 15

一个原因可能是 Windows 没有允许它从“外部来源”加载。要解决此问题:

  • 右键单击 .dll
  • “特性”
  • 在“常规”下,单击“取消阻止”


小智 10

试试这个(没有扩展名.dll):

clr.AddReference(r"C:\pyfornet_test\DotNet4Class")
Run Code Online (Sandbox Code Playgroud)


Jos*_*ton 7

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总是会遇到问题.

  • PythonNet 2.3加载.NET 4 DLL很好.但是使用我的.NET 4 DLL,我也收到错误"无法找到程序集"错误.我的问题是我的DLL是为x86构建的,而我的CPython是x64.将我的Python更改为x86修复了该问题.简而言之,错误"无法找到程序集"意味着"无法_load_程序集". (3认同)

Dav*_*yer 5

我有这样的代码(我将 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)


tun*_*lik 5

你试过 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)

  • 这对我不起作用 (2认同)