Python スクリプトから移植可能な .NET ライブラリ (標準の .NET および Silverlight 環境で使用される) をロードする際に深刻な問題があります。
.NET DLL ファイルのバージョンは 4.0.3.319.233 (System.Core.DLL)、IronPython は 2.7.1 で、32 ビット/x86 モードで実行されます。.NET 4 で C# を使用する Visual Studio 2010。ポータブル ライブラリを使用するための 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' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
最後のコードは、Python スクリプトが別の .NET プログラム内から自動的に呼び出され、独自の Python エンジンをインスタンス化すると機能するように見えますが、スクリプトが Visual Studio の Python プロジェクトから実行されると上記のエラーが発生します。VisualStudio の Python 設定、Tools\Options\Python Tools\Interpreter Options は 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」のエラーは引き続き発生します。