Я пишу приложение С#, в которое встроен IronPython (2.0.1). Идея состоит в том, чтобы разоблачить части приложения на скрипты IronPython, которые пользователи пишут.
Я хочу предоставить пользователям возможность отлаживать написанные ими сценарии с помощью Visual Studio Debugger. Обратите внимание, что сценарии запускаются в размещенной среде, а не через исполняемый файл IronPython (ipy.exe).
После немного магии Reflector на сборках IronPython я придумал что-то, что позволяет мне это делать, но я не уверен, что это предписанный путь. В основном, я создаю объект ScriptRuntime с свойством "DebugMode", установленным в true, а затем создаю "ScriptEngine" на основе python из "ScriptRuntime", который я использую для хостинга. Код ниже.
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);
Теперь, когда я запускаю сценарии в размещенной среде, используя:
ScriptSource script = engine.CreateScriptSourceFromFile(path);
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Я могу разместить точки останова в файлах script, и они попадают, когда выполняется script.
Итак, есть ли лучший/простой способ сделать это?
Спасибо