相关疑难解决方法(0)

Python for .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但我试图避免使用它.

谢谢你的帮助!

.net c# python dll python.net

6
推荐指数
1
解决办法
1456
查看次数

Python for .NET:如何使用同一DLL的不同版本显式创建C#类的实例?

我有一个.cs文件

namespace SomeNamepace
{


    public struct SomeStruct
    {
        ....
    }

    public static class SomeClass
    {
        ....
    }
Run Code Online (Sandbox Code Playgroud)

到目前为止,我使用它与PythonNET一样

import clr
clr.AddReference('c:\\Test\Module.dll')
from SomeNamepace import SomeClass, SomeStruct

SomeClass.SomeMethod(...)
Run Code Online (Sandbox Code Playgroud)

我现在的问题是我需要使用具有相同名称且没有设置版本号的dll,因此PythonNET不会将它们视为两个不同的dll,而是相同.即使我使用AddReference的完整路径导入它们.

现在我想明确地使用它们,如下所述:

Python for .NET:在多个版本中使用相同的.NET程序集

喜欢

lib = clr.AddReference('c:\\Test\Module.dll')
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西来创建一个SomeClass类似的实例

lib.SomeNamespace.SomeClass()
Run Code Online (Sandbox Code Playgroud)

要么

import System
System.Activator.CreateInstance(lib.GetType('SomeNamespace.SomeClass'))
Run Code Online (Sandbox Code Playgroud)

或使用方法InitializeCreateInstance

或者如下面的链接中所述

from System import Type
type1 = lib.GetType('SomeNamespace.SomeClass')
constructor1 = type1.GetConstructor(Type.EmptyTypes)    
Run Code Online (Sandbox Code Playgroud)

最后一切都失败了,没找到的东西,没有方法等等.

这样做的正确语法是什么?

.net c# python python.net pythonnet

6
推荐指数
1
解决办法
1509
查看次数

clr.AddReference('example_file') - 无法找到程序集

我正在尝试使用 clr 模块中的 AddReference('example_file') 方法添加对“example_file.dll”的引用:

>>>import clr
>>>clr.AddReference('example_file')
Run Code Online (Sandbox Code Playgroud)

结果我得到:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
System.IO.FileNotFoundException: Unable to find assembly 'example_file'.

at Python.Runtime.CLRModule.AddReference(String name)
Run Code Online (Sandbox Code Playgroud)

所有文件都位于当前工作目录中,sys.path 如下所示:

>>> sys.path
['', 'C:\\Python27\\lib\\site-packages\\pip-1.2.1-py2.7.egg', 'C:\\Python27', 'C
:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\lib\\
site-packages', 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\']
Run Code Online (Sandbox Code Playgroud)

此外,由于:

>>>clr.FindAssembly('example_file')
Run Code Online (Sandbox Code Playgroud)

我明白了

u'example_file.dll 
Run Code Online (Sandbox Code Playgroud)

问题一天天出现。我很困惑,因为它以前工作得很好 - 我不知道什么会对此产生影响。我正在使用 Windows 7 x64、python 2.73 和 .Net Framework 4

.net python ironpython python-2.7

5
推荐指数
1
解决办法
3万
查看次数

标签 统计

.net ×3

python ×3

c# ×2

python.net ×2

dll ×1

ironpython ×1

python-2.7 ×1

pythonnet ×1