J'écris une application C# dans laquelle est inséré IronPython (2.0.1). L'idée est d'exposer des parties de l'application aux scripts IronPython, que les utilisateurs écrivent.Débogage de scripts IronPython dans un environnement (intégré) hébergé
Je souhaite fournir aux utilisateurs la possibilité de déboguer les scripts écrits par eux, à l'aide de Visual Studio Debugger. Notez que les scripts sont exécutés dans l'environnement hébergé et non via l'exécutable IronPython (ipy.exe). Après un peu de magie Reflector sur les assemblages IronPython, j'ai trouvé quelque chose qui me permet de faire cela, mais je ne suis pas sûr que ce soit la manière prescrite. Fondamentalement, ce que je fais est de créer un objet "ScriptRuntime" avec la propriété "DebugMode" définie sur true, puis créer un "ScriptEngine" basé sur python de la "ScriptRuntime", que j'utilise pour l'hébergement. Code ci-dessous.
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);
Maintenant, quand j'exécuter les scripts dans l'environnement hébergé, en utilisant:
ScriptSource script = engine.CreateScriptSourceFromFile(path);
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Je peux placer dans les points d'arrêt des fichiers de script et ils Touchés, lorsque le script est exécuté.
Alors, y a-t-il un moyen meilleur/plus facile de faire cela?
Merci
C'est une question très ancienne/réponse - est cette solution devrait travailler avec des outils Python avec Visual Studio (Vous ne savez pas vraiment comment "Visual Studio Debugger" a travaillé avec Python en 2009)? J'ai essayé à la fois cet extrait et celui de la réponse acceptée, mais je ne peux pas toucher les points d'arrêt dans mon script ironpython .py. Essayé VS 2013 et 2015 sans chance ... – Joe
Vous semblez avoir trouvé votre réponse, merci de la partager dans ma question. – Kaerber