我想为Visual Studio开发一个扩展程序,一旦断点被击中,它就会在运行时运行一小段代码。
为了增加一些清晰度,我非常希望通过在即时窗口中手动编写代码来调用一些代码并很好地渲染结果(最好是树视图)。
我不愿发表这个问题,因为乍一看似乎相当宽泛,但我相当确定实现这一目标的方法并不多。
我最初看过Roslyn,但我相信只有在我没有弄错的情况下才能编译?
我已经有了这样做的代码,并且它在即时窗口中运行完美,但是我想把它作为一个功能包装起来,因为手动输入它有点麻烦,导航也不容易。我需要的是“手表”和“即时”功能之间。
问题
哪种平台/技术允许我以某种方式扩展Visual Studio,我可以在运行时运行代码片段'ad hoc'并很好地显示结果?
答案 0 :(得分:0)
我建议调查一下:
CSharpScript.EvaluateAsync
来评估运行时的代码片段答案 1 :(得分:0)
问:哪种平台/技术允许我以某种方式扩展Visual Studio,我可以在运行时运行代码段'ad hoc'并很好地显示结果?
我会按如下方式处理:
基本上你创建一个函数如下:
// Add some convenient using's.
public class EvaluationClass {
public static object Evaluate() {
return /* paste the evaluated expression here */;
}
}
这种方法的好处是结果会自动加框/转换为object
,这很好。这里唯一的问题是你可能想要为void
情况进行第二次编译运行,这将失败,因为它不能被装箱/转换为对象。
接下来,
c:\windows\microsoft.net\framework[x]\...
)基本技巧如下:
try {
var assembly = Assembly.Load(tempDllName);
// TODO: check if assembly is null --> compilation error
var eval = assembly.GetType("EvaluationClass").GetMethod("Evaluate");
// TODO: check if eval is null --> compilation error
var result = eval.Invoke();
// Draw result on window
}
catch (Exception ex) {
// Handle exception appropriately
}
this
对象作为value
传递给方法...我还没有研究如何做到这一点;虽然它应该在API的某个地方提供...