2013-05-08 70 views
5

我從Python腳本加載可移植的.NET庫(用於標準的.NET和Silverlight環境)存在嚴重的麻煩。如何在Iron Python腳本中加載可移植的.NET庫?

.NET DLL文件版本是4.0.3.319.233(System.Core.DLL),IronPython是2.7.1,運行在32位/ x86模式下。 Visual Studio 2010與.NET 4下的C#。還安裝了用於便攜式庫使用的Microsoft .NET更新KB2468871(版本2)。

如果我試圖從Python腳本加載庫:

clr.AddReferenceToFileAndPath(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll") 

它不能被訪問,當腳本達到一個類型,它說: 「屬性[類型便攜式組件]'namespace#'是隻讀的「 」表示程序集尚未加載(或作爲Silverlight,並且不能由Python腳本使用)。

代碼更改爲:(來自的System.Reflection Assembly類)

PortableAssembly = Assembly.LoadFrom(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll") # load through .NET Reflection, Python won't load Portable assembly properly! 
clr.AddReference(PortableAssembly) 

導致錯誤: exceptions.IOError發生 消息:[錯誤2]無法加載文件或程序集「系統.Core,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes'或其依賴項之一。該系統找不到指定的文件。

當從另一個.NET程序中自動調用Python腳本,實例化它自己的Python引擎時,最後的代碼似乎工作,但是當從Visual Studio中的Python項目執行腳本時會出現上述錯誤。 VisualStudio中的Python設置,Tools \ Options \ Python Tools \ Interpreter選項適用於x86/32位模式。所有的環境參數都表明使用了.NET 4。

我現在有多種方法可以從C#/ .NET生成的Python引擎中修復它,但是如何將可移植程序集加載到基本的IronPython運行時環境中,以便它可以在正確的.NET 4環境中工作,而不是試圖加載任何.NET 2的東西?

更新: 我在MS KB2468871更新後重新啓動並重建了我的便攜式庫,並且還卸載了VS的IronPython和Python工具,並將它們替換爲版本2.7.3和1.5(VS2010)。 'System.Core,Version = 2.0.5.0'的錯誤仍然存​​在。

+0

您是否找到了解決此問題的解決方案?我現在面對這個問題已經有2天了,而且我無法完成它的工作。 – 2015-06-22 06:39:24

回答

-1

使用sys.path中添加pathes到您的.NET的DLL:

import sys 
sys.path.append("c:\MyDotNetDir"); 

import clr 
clr.AddReference("MyDotNetAssembly.dll") 

# do not forget to import the namespace 

import Erik.MyDotNetAssemblyNamespace 

inst = Erik.MyDotNetAssemblyNamespace.MyDotNetObject() 
+0

儘管FileNotFoundException似乎缺少程序集,但可移植庫引用被視爲特殊的,並且此異常表明某人正在加載不正確。 – 2013-08-02 16:02:18

0

的FileNotFoundException異常是一個跡象表明事情正在使用的,而不是Assembly.LoadFrom Assembly.LoadFile加載組件,但不處理組裝策略正確。我不確定Visual Studio中的Python代碼是如何工作的,但是如果您能夠在便攜式程序集加載之前運行任何引導程序代碼,請嘗試下面顯示的代碼: PCL Retargetable Assembly not redirected inside MS CRM Plugin