GetAnalyzerDiagnosticsAsync returns 如果 DiagnosticAnalyzer 的 Initialize 为空则无
GetAnalyzerDiagnosticsAsync returns nothing if a DiagnosticAnalyzer has an empty Initialize
我正在编写一个方法,该方法获取一组 DiagnosticAnalyzer
的 Project
的所有 Diagnostic
:
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;
}
如果 analyzers
中的所有 DiagnosticAnalyzer
都具有包含某些寄存器调用的 Initialize(AnalysisContext)
方法,则此方法工作正常:
public override void Initialize(AnalysisContext context)
{
context.Register...(...);
}
但是,如果其中任何一个实现为空
public override void Initialize(AnalysisContext context)
{
// nothing here
}
然后 diagnostics.Count() == 0
.
我是否误解了 GetAnalyzerDiagnosticsAsync()
和 DiagnosticAnalyzers
的行为,因此这是正确的做法?或者这是 Roslyn 中的错误?或者我应该使用另一种方法吗?或者别的什么?
我很想认为这是 Roslyn 中的一个错误(因此我有 opened an issue)。深入研究源代码和调试结果发现差异发生在 CompilationWithAnalyzers._driver.DiagnosticQueue
- 当它工作时它具有所需的 Count
但当问题发生时是 0
。
剧情变厚了...
事实证明,这 是 Roslyn 的一个错误,现已修复:
我正在编写一个方法,该方法获取一组 DiagnosticAnalyzer
的 Project
的所有 Diagnostic
:
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;
}
如果 analyzers
中的所有 DiagnosticAnalyzer
都具有包含某些寄存器调用的 Initialize(AnalysisContext)
方法,则此方法工作正常:
public override void Initialize(AnalysisContext context)
{
context.Register...(...);
}
但是,如果其中任何一个实现为空
public override void Initialize(AnalysisContext context)
{
// nothing here
}
然后 diagnostics.Count() == 0
.
我是否误解了 GetAnalyzerDiagnosticsAsync()
和 DiagnosticAnalyzers
的行为,因此这是正确的做法?或者这是 Roslyn 中的错误?或者我应该使用另一种方法吗?或者别的什么?
我很想认为这是 Roslyn 中的一个错误(因此我有 opened an issue)。深入研究源代码和调试结果发现差异发生在 CompilationWithAnalyzers._driver.DiagnosticQueue
- 当它工作时它具有所需的 Count
但当问题发生时是 0
。
剧情变厚了...
事实证明,这 是 Roslyn 的一个错误,现已修复: