我正在修改來自代碼分析器模板的默認分析器項目,試圖讓它在部分類的所有聲明中進行報告。關於部分類的ReportDiagnostic
我已經修改了代碼:
public override void Initialize(AnalysisContext context)
{
context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.NamedType);
}
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
var namedTypeSymbol = (INamedTypeSymbol)context.Symbol;
// Find just those named type symbols with names containing lowercase letters.
if (namedTypeSymbol.Name.ToCharArray().Any(char.IsLower))
{
foreach (var location in namedTypeSymbol.Locations)
{
// For all such symbols, produce a diagnostic.
var diagnostic = Diagnostic.Create(Rule, location, namedTypeSymbol.Name);
context.ReportDiagnostic(diagnostic);
}
}
}
在兩個單獨的文件,我有這樣的部分類:
// File1.cs
partial class Foo
{
public string BarString;
}
// File2.cs
partial class Foo
{
public string FooBarString;
}
我穿上ReportDiagnostic斷點和我看到它呼籲每個位置,但在Visual Studio中它只報告單個文件中的診斷。
如果我把Foo
的多個實現放在一個單獨的文件中(它碰巧報告了那個文件聲明),那麼我會看到兩個診斷報告。
我誤解診斷應該如何報告或這是一個錯誤?如果它是一個bug,是Roslyn問題還是Visual Studio使用Roslyn時出現問題?
您是否在IDE中打開了這兩個文件? – SLaks
是的,這兩個文件都是打開的。 –
我可以重現這一點。這對我來說就像是一個bug。如果你還沒有,我會建議在這裏打開一個問題:https://github.com/dotnet/roslyn/issues/ – JoshVarty