Roslyn - 我可以订阅添加到我的编译中的诊断吗?

Roslyn - Can I subscribe to diagnostics being added to my compilation?

我正在使用带有 StackExchange.Precompilation 的 Roslyn SDK 来为 C# 创建构建时自动重构(预编译器宏)。

在语法重写的过程中,当出现错误或者源代码中宏使用不当的时候,在编译中添加一个Diagnostic是非常有用的。与抛出异常不同,这会在 VS 错误列表中显示错误 window 并且不会像异常那样中止线程,因此可以为用户累积和列出所有构建错误。

然而,为了调试重写器,能够订阅一个 DiagnosticAdded 事件(或可观察的)会非常方便,这样可以设置一个断点来捕获所有 diagnostics/errors.

Roslyn SDK(或StackExchange.Precompilation)中是否有这样的发布者?

什么都没有public。 Roslyn 是开源的,因此您可以构建自己的用于测试,然后在您感兴趣的诊断函数中设置断点。

我猜这个问题与

有关

StackExchange.Precompilation doesn't have any events/publishers for this, but for testing purposes you could craft a After/BeforeCompileContext with an IList<Diagnostics> that allows observation, e.g. ObservableCollection:

CSharpCompilation compilation = ...;
ICompileModule testModule = ...
var diagnostics = new ObservableCollection<Diagnostics>();
var context = new BeforeCompileContext
{
    Compilation = compilation,
    Diagnostics = diagnostics,
};
diagnostics.CollectionChanged += (s, e) => { /* do something */ };
testModule.BeforeCompile(context);