Я пишу приложение на C #, в которое встроен IronPython (2.0.1). Идея состоит в том, чтобы представить части приложения сценариям IronPython, которые пишут пользователи.
Я хочу предоставить пользователям возможность отлаживать написанные ими сценарии с помощью отладчика Visual Studio. Обратите внимание, что сценарии запускаются в размещенной среде, а не через исполняемый файл 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);
Я могу разместить точки останова в файлах сценария, и они получат удар при выполнении сценария.
Итак, есть ли лучший / более простой способ сделать это?
Спасибо