2015-09-09 5 views
6

Ich versuche pythonnet runtime dll von scriptcs zu laden und es funktioniert nicht mit roslyn backend, weil dynamic in Roslyn nicht unterstützt wird , aber Mono-Back-End-Drossel mit dem folgenden Fehler:für Skripte `dynamic` wird nicht von Roslyn unterstützt und nur mit mono, aber mono scheitert an 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 

Frage:


Wie kann ich Mono-Backend von scriptcs mit Python.Runtime.DLL zu arbeiten? Muss ich irgendwelche DLLs vorher laden? Muss die Python.Runtime.DLL mit Mono-Unterstützung oder .NET kompiliert werden?

+0

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

Antwort

4

Dieser Fehler (CS0009 mit Mono-Compiler) ist ziemlich generisch und bedeutet "etwas falsch" mit gegebenen Assembly, so ziemlich schwer zu debuggen. Ein Weg, um fortzufahren, ist in der Tat unter Mono kompilieren. Wenn Sie ihren Quellcode herunterladen (https://github.com/pythonnet), finden Sie Anweisungen dazu (siehe auch pythonnet \ src \ monoclr \ README.txt).

Abhängig von Ihren Zielen können Sie jedoch stattdessen IronPython verwenden, das offiziell von mono unterstützt wird und sofort einsatzbereit ist. Beispiel unten vorausgesetzt, dass Sie zip von Ironpython heruntergeladen und extrahiert es irgendwo:

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

Der Punkt testet interaktiv CPython numerischen Code in C# eingebettet. Ironpython ist keine Option. – denfromufa

+0

Ich muss unter .NET testen, denn das ist Produktionsumgebung, nicht Mono. – denfromufa

+0

.NET ist Produktionsumgebung, aber in Skripten laden Sie unter Mono in Ihrem Beispiel. Sie arbeiten also unter Mono, und Pythonnet funktioniert dort nicht ohne Neukompilierung unter Mono. – Evk