2015-06-15 78 views
10

我正在修改來自代碼分析器模板的默認分析器項目,試圖讓它在部分類的所有聲明中進行報告。關於部分類的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時出現問題?

+0

您是否在IDE中打開了這兩個文件? – SLaks

+0

是的,這兩個文件都是打開的。 –

+0

我可以重現這一點。這對我來說就像是一個bug。如果你還沒有,我會建議在這裏打開一個問題:https://github.com/dotnet/roslyn/issues/ – JoshVarty

回答

0

這是Visual Studio診斷服務的V1實現的限制。

有一個在羅斯林庫的問題跟蹤此問題:

https://github.com/dotnet/roslyn/issues/3748#issuecomment-117231706

從Github的問題的迴應:

這是V1執行的已知問題Visual Studio IDE的診斷服務。目前它不處理分析儀 在被分析文檔之外報告診斷。因此,如果 File1.cs的主定義爲Foo,其中AnalyzeSymbol爲 被調用,則診斷服務僅保留分析儀在此文件中報告的診斷報告 。