with studio iron example dotnet .net debugging ironpython

.net - example - ironpython studio



DepuraciĆ³n de scripts de IronPython en un entorno alojado(integrado) (2)

Estoy escribiendo una aplicación de C # que tiene IronPython (2.0.1) incrustado en ella. La idea es exponer partes de la aplicación a los scripts de IronPython, que los usuarios escriben.

Quiero proporcionar a los usuarios la capacidad de poder depurar los scripts escritos por ellos, utilizando el depurador de Visual Studio. Tenga en cuenta que los scripts se ejecutan en el entorno alojado y no a través del ejecutable IronPython (ipy.exe).

Después de un poco de magia Reflector en las asambleas de IronPython, se me ocurrió algo que me permite hacer eso, pero no estoy seguro de si esta es la forma prescrita. Básicamente, lo que hago es crear un objeto "ScriptRuntime" con la propiedad "DebugMode" establecida en verdadero y luego crear un "ScriptEngine" basado en python desde el "ScriptRuntime", que uso para hospedar. Código abajo.

ScriptRuntimeSetup setup = new ScriptRuntimeSetup(); setup.DebugMode = true; setup.LanguageSetups.Add(Python.CreateLanguageSetup(null)); ScriptRuntime runtime = new ScriptRuntime(setup); ScriptEngine engine = runtime.GetEngineByTypeName(typeof(PythonContext).AssemblyQualifiedName);

Ahora cuando ejecuto los scripts en el entorno alojado, usando:

ScriptSource script = engine.CreateScriptSourceFromFile(path); CompiledCode code = script.Compile(); ScriptScope scope = engine.CreateScope(); script.Execute(scope);

Puedo colocar puntos de interrupción en los archivos de secuencia de comandos y recibirlos cuando se ejecuta la secuencia de comandos.

Entonces, ¿hay una manera mejor / más fácil de hacer esto?

Gracias



Ok lo tengo. Hay un diccionario de opciones que "Python.CreateEngine" puede tomar como argumento. Uno puede especificar el modo de depuración en eso.

Dictionary<string, object> options = new Dictionary<string, object>(); options["Debug"] = true; engine = Python.CreateEngine(options);

Creo que esto es bastante sencillo.