【发布时间】:2016-06-19 15:33:52
【问题描述】:
我已将 Roslyn 源代码构建为 described here。
我想在 C# 编译器中添加一个断点,并逐步完成这个简单程序的编译:
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()。然后,您可以单步执行您感兴趣的解析或发出代码。 -
谢谢乔希!我添加了一个演示
ParseText的答案。 @JoshVarty -
我写了一篇博客文章,有点基于@JoshVarty 在这里和他的一篇博客文章中的建议。任何想要玩弄 Roslyn 内部的人都可能会感兴趣。 renniestechblog.com/information/…