6

scriptcs から pythonnet ランタイム dll を読み込もうとしていますが、Roslyn では動的がサポートされていないため、roslyn バックエンドでは機能しませんが、mono バックエンドは次のエラーでチョークします。

$ 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 の Mono バックエンドを取得するにはどうすればよいですか? その前に DLL をロードする必要がありますか? Python.Runtime.DLL は Mono サポートでコンパイルする必要がありますか、それとも .NET で問題ありませんか?

4

1 に答える 1

4

このエラー (モノ コンパイラでの CS0009) は非常に一般的で、特定のアセンブリに「何か問題がある」ことを意味するため、デバッグが非常に困難です。進める方法の 1 つは、mono でコンパイルすることです。ソース コード ( https://github.com/pythonnet ) をダウンロードすると、その方法に関する説明が表示されます ( pythonnet\src\monoclr\README.txt も参照してください)。

ただし、目標によっては、代わりに IronPython を使用することを検討できます。これは、mono によって公式にサポートされており、すぐに実行できます。以下の例では、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
>
于 2015-09-12T17:57:17.667 に答える