如果DiagnosticAnalyzer具有空Initialize,则GetAnalyzerDiagnosticsAsync不返回任何内容

时间:2015-05-27 08:03:16

标签: c# code-analysis roslyn

我正在编写一个方法,可以获取Diagnostic的{​​{1}}的所有Project s:

DiagnosticAnalyzer

如果private static async Task<ImmutableArray<Diagnostic>> GetDiagnosticsAsync( Project project, ImmutableArray<DiagnosticAnalyzer> analyzers) { var compilation = await project.GetCompilationAsync(); var withAnalyzers = compilation.WithAnalyzers(analyzers); var diagnostics = await withAnalyzers.GetAnalyzerDiagnosticsAsync(); return diagnostics; } 中的所有DiagnosticAnalyzer的{​​{1}}方法都包含一些注册调用,则此方法可以正常工作:

analyzers

但是,如果其中任何一个具有空实现

Initialize(AnalysisContext)

然后public override void Initialize(AnalysisContext context) { context.Register...(...); }

我是否误解了public override void Initialize(AnalysisContext context) { // nothing here } diagnostics.Count() == 0的行为,因此这是正确的做法?或者这是罗斯林的错误?或者我应该使用另一种方法吗?或其他什么?

我很想在Roslyn中认为这是一个错误(因此我有opened an issue)。深入研究源代码和调试结果GetAnalyzerDiagnosticsAsync()中发生差异 - 当它工作时,它会产生所需的DiagnosticAnalyzers但问题发生时为CompilationWithAnalyzers._driver.DiagnosticQueue

情节变浓......

1 个答案:

答案 0 :(得分:0)

原来这个 是Roslyn的一个错误,现已修复: