2011-06-13 73 views
8

我正在使用Windows 7,64位。我設法下載並安裝pythonnet,所以通過pythonnet從Python使用C#程序集

import clr 
clr.AddReference("System.Windows.Forms") 
from System.Windows.Forms import Form 

工作正常。我也下載並編譯/運行了一個C#應用程序,它創建了很多程序集。有問題的應用程序是ARDrone-Control.NET。

如何使用Python生成的DLL文件(而不僅僅是內置的C#類)。

因爲我從來沒有使用C#(這就是爲什麼我想使用Python的庫),我很樂意澄清這個問題。

+1

看起來你正在接觸很多不必要的摩擦。你是否考慮過簡單地使用Iron Python來完成這個項目? – 2011-06-13 16:12:06

+0

IronPython非常穩定,但是一旦MS開源,開發變得非常緩慢。 CPython非常穩定,具有強大的C API,可用於numpy,Cython,pandas等。 – denfromufa 2014-11-07 04:04:08

回答

3

從我收集你試圖加載一個外部程序集在Python.Net,我已經做了一點與該庫的工作。你應該考慮使用IronPython的替代,但使用Python.Net你可以通過NET的反射加載程序集這樣

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import clr 
>>> from System.Reflection import Assembly 
>>> dll1 = Assembly.LoadFile("C:\Python\Python27-32\Lib\site-packages\Python.Runtime.dll") 
>>> clr.Python.Runtime 
<module 'Python.Runtime'> 
>>> clr.Python.Runtime.PythonEngine 
<class 'Python.Runtime.PythonEngine'> 
+1

不幸的是IronPython不是一個選項,因爲大量其他擴展包只能用於CPython。 – Petter 2011-06-16 07:25:15

+0

提供的示例應該可以使用python.net – mitchellsg 2011-06-16 21:07:46

+0

好的,謝謝! 1.2.3.4。 – Petter 2011-06-19 12:25:13

11

只是提供另一種方法:

import sys 
sys.path.append("C:\Path\to\your\assemblies") 

clr.AddReference('MyAssembly') 
from MyAssembly import MyClass 

MyClass.does_something() 

這是假設在C:\Path\to\your\assemblies文件夾中有一個MyAssembly.dll文件。

所以'技巧'是你必須在clr.AddReference之前將你的程序集文件夾添加到sys.path

+0

我必須在導入clr之前將彙編目錄添加到sys.path中。我不知道這是最近的,還是我機器的異常情況 - 但是如果它很重要,應該在這裏指出。 – Tritium21 2016-05-08 15:04:11