c# mono roslyn python.net scriptcs

c# - para las secuencias de comandos `dynamic` no es compatible con Roslyn y está disponible solo con mono, pero el mono falla en la DLL



python.net scriptcs (1)

Intento cargar pythonnet runtime dll desde scriptcs y no funciona con el back-end de roslyn porque la dinámica no es compatible con Roslyn, pero el backend mono se bloquea con el siguiente error:

$ 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

Pregunta:

¿Cómo puedo obtener Mono backend de scriptcs trabajando con Python.Runtime.DLL? ¿Debo cargar cualquier archivo DLL antes de eso? ¿Tiene que compilar Python.Runtime.DLL con soporte Mono o .NET está bien?


Este error (CS0009 con compilador mono) es bastante genérico y significa "algo incorrecto" con el ensamblado dado, por lo que es bastante difícil de depurar. Una manera de proceder es compilar bajo mono. Si descarga su código fuente ( https://github.com/pythonnet ) encontrará instrucciones sobre cómo hacerlo (consulte pythonnet / src / monoclr / README.txt también).

Sin embargo, dependiendo de sus objetivos, puede considerar usar IronPython en su lugar, que es oficialmente compatible con mono y se ejecuta fuera de la caja. El siguiente ejemplo supone que ha descargado el archivo zip de IronPython y lo ha extraído en alguna parte:

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 >