IronPython.net のドキュメントには、アセンブリ内の MSIL が CLS に準拠していないと書かれていますが、回避策はありますか?
2 に答える
dynamic
これは、C#4.0にタイプを追加する動機の一部でした。最大の問題は、IronPython宣言に型情報が含まれていないため、C#からの使用が困難になることです。このdynamic
キーワードは、このような動的に型付けされたオブジェクトのサポートをC#4.0に追加します。たとえば、次を参照してください。
C#3.0から関数/オブジェクトを呼び出すのは少し面倒ですが、それでも可能です。foo.Invoke("Bar", 42)
単に書くのではなく、のようなものを書く必要がありますfoo.Bar(42)
。
スマホで書いてますので、おかしなところはご容赦ください。コンパイルされたアセンブリを使用するには、pyc.py ではなく clr.CompileModules でコンパイルしてください。次に、C# で、Python ScriptEngine オブジェクトの LoadAssembly メソッドを呼び出します。次に、ScriptEngine で ImportModule メソッドを呼び出して、モジュールをインポートできます。そこから dynamic キーワードを利用できる場合は、そうしてください。そうしないと、GetVariable へのマジック ストリングの大量の呼び出しに行き詰まります。また、コンパイル済みの Python アセンブリに何らかの形で標準ライブラリを提供する必要があることにも注意してください。