2015-06-15 22 views
10

Kısmi sınıflar için tüm bildirimlerde rapor vermeye çalışmak için kod analizörü şablonundan gelen varsayılan analizci projesini değiştiriyorum.Report Partial ClassesDiagnostik

Ben kodunu değiştirmiş: İki ayrı dosyalarda

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); 
     } 
    } 
} 

, böyle kısmi sınıfları:

// File1.cs 
partial class Foo 
{ 
    public string BarString; 
} 

// File2.cs 
partial class Foo 
{ 
    public string FooBarString; 
} 

Ben ReportDiagnostic üzerinde kesme noktaları koymak ve her çağrısında görüyorum konumu, ancak Visual Studio'da yalnızca tek bir dosyada tanılama raporlar.

Birden çok uygulamayı Foo tek bir dosyaya koyarsam (ve bu dosya bildiriminde bildiriliyorsa), her iki tanılamayı da bildiririm.

Tanılamaların nasıl raporlanacağını veya bu bir hata olduğunu yanlış anlıyor muyum? Bir hata ise, bu bir Roslyn sorunu mu yoksa Visual Studio'nun Roslyn tüketimi ile ilgili bir problem mi?

+0

Her iki dosya da IDE'de açık mı? – SLaks

+0

Evet, her iki dosya açık. –

+0

Bunu yeniden üretebilirim. Bana bir böcek gibi geliyor. Şimdiye kadar bunun için bir sorun açmayı önermediyseniz: https://github.com/dotnet/roslyn/issues/ – JoshVarty

cevap

0

Bu, Visual Studio tanılama hizmetinin V1 uygulamasının bir sınırlamasıdır. Github sayısında tepki itibaren

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

: Bu sorunu izlemek için Roslyn deposundaki bir sorun var

Bu, v1 uygulanmasında bilinen bir sorundur Visual Studio IDE'nin tanılama hizmeti. Şu anda analiz edilen belgenin dışındaki analizör raporlama diyagnozunu ele almıyor. Bu nedenle, için File1.cs, AnalyzeSymbol'un için çağrıldığı birincil tanıma sahipse, tanılama hizmeti yalnızca bu dosyadaki analizör tarafından raporlanan bildirimlerini saklar.

İlgili konular