我已将Roslyn源代码构建为described here。单步执行Roslyn C#编译器
我想在C#编译器添加断点,通过这个简单程序的compliation步骤:
using System;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var result = 1 + 2;
Console.WriteLine(result);
}
}
}
我应该在哪里设置断点?它应该在编译过程的早期,因为我希望通过解析甚至是轻松一步。
如果我将CompilerExtension设置为启动项目并按F5(启动调试),将启动运行新建的编译器的Visual Studio副本。我想避免每次想要遍历编译器都必须启动Visual Studio的新实例。什么是设置一个小程序的好方法,它直接调用上述源代码中的编译器代码?
您可以添加一个新项目到Roslyn解决方案,添加对正确的Microsoft.CodeAnalysis项目的引用,然后调用'CSharpSyntaxTree.ParseText()'和'Compilation.Emit()'。然后,您可以逐步浏览您感兴趣的解析或发布代码。 – JoshVarty
感谢Josh!我添加了一个演示'ParseText'的答案。 @JoshVarty – dharmatech
我写了一篇博客文章,有点基于@JoshVarty在这里和他的博客文章中的建议。对于任何想要与Roslyn内部玩家一起玩的人来说,这可能是有趣的。 https://renniestechblog.com/information/33-modifying-roslyn-step-1-initial-test – RenniePet