簡體   English   中英

如何在Iron Python腳本中加載可移植的.NET庫?

[英]How to load portable .NET library within Iron Python script?

從Python腳本加載可移植的.NET庫(在標准的.NET和Silverlight環境中使用)時遇到了嚴重的麻煩。

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

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

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

無法訪問它,當腳本到達某個類型時,它會說: 'namespace#'的屬性[可移植程序集中的類型]是只讀的“表示程序集尚未加載(或者作為Silverlight,並且不能被Python腳本使用)。

將代碼更改為:(來自System.Reflection的程序集類)

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

導致錯誤: exceptions.IOError出現消息:[Errno 2]無法加載文件或程序集'System.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”的錯誤仍然存​​在。

FileNotFoundException指示某些內容正在使用Assembly.LoadFile而不是Assembly.LoadFrom加載程序集,但未正確處理程序集策略。 我不確定Visual Studio中的Python代碼是如何工作的,但如果您在加載可移植程序集之前能夠運行任何引導程序代碼,請嘗試我在此處顯示的代碼: PCL Retargetable Assembly未在MS CRM插件中重定向

使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM