2015-09-09 3 views
6

scriptcsからpythonnetランタイムDLLをロードしようとしていますが、roslynしかし、モノのバックエンドは、次のエラーでチョーク:はスクリプト `dynamic`はRoslynでサポートされておらず、モノでのみ利用可能ですが、DLLでモノラルが失敗します

$ scriptcs -modules mono 
scriptcs (ctrl-c to exit or :help for help) 

> #r "F:\Python\Python27\Lib\site-packages\Python.Runtime.dll" 
error CS0009: Metadata file `F:\Python\Python27\Lib\site-packages\Python.Runtime.dll' does not contain valid metadata 

質問:


どのように私はPython.Runtime.DLLでの作業scriptcsのモノのバックエンドを得ることができますか?それ以前にDLLをロードする必要はありますか? Python.Runtime.DLLはMonoサポートでコンパイルする必要がありますか.NETは問題ありませんか?

+0

https://github.com/scriptcs/scriptcs/issues/1092 – denfromufa

答えて

4

このエラー(モノラルコンパイラを使用したCS0009)は非常に一般的であり、指定されたアセンブリでは何か間違っていることを意味します。進める1つの方法は実際にモノラルでコンパイルすることです。ソースコード(https://github.com/pythonnet)をダウンロードした場合、その方法についての説明があります(pythonnet \ src \ monoclr \ README.txtも参照してください)。

しかし、あなたの目標に応じて、代わりにIronPythonを使用することを検討することができます。これは正式にはモノでサポートされており、そのまま使用できます。以下の例では、IronPythonののzipファイルをダウンロードし、どこかでそれを抽出前提としています

scriptcs -modules mono 
scriptcs (ctrl-c to exit or :help for help) 
> #r "G:\dev_tools\IronPython-2.7.5\IronPython-2.7.5\IronPython.dll" 
> #r "G:\dev_tools\IronPython-2.7.5\IronPython-2.7.5\Microsoft.Dynamic.dll" 
> #r "G:\dev_tools\IronPython-2.7.5\IronPython-2.7.5\Microsoft.Scripting.dll" 
> using System; 
> using System.IO; 
> using IronPython.Hosting; 
> using Microsoft.Scripting; 
> using Microsoft.Scripting; 
> using Microsoft.Scripting.Hosting; 
> string script = "print 'hello world'"; 
> var engine = Python.CreateEngine(); 
> var scope = engine.CreateScope(); 
> var source = engine.CreateScriptSourceFromString(script, SourceCodeKind.Statements); 
> var compiled = source.Compile(); 
> var result = compiled.Execute(scope); 
hello world 
> 
+0

点は、対話的にC#で埋め込まれたCPythonの数値コードをテストしています。 Ironpythonはオプションではありません。 – denfromufa

+0

これは.NETの下でテストする必要があります。これは、Monoではなくプロダクション環境であるためです。 – denfromufa

+0

.NETはプロダクション環境ですが、スクリプトではサンプルでモノラルで読み込みます。モノで作業しているので、Pythonnetはモノラルで再コンパイルしなければ動作しません。 – Evk

関連する問題