2015-06-15 4 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 पर breakpoints डाल दिया और यह प्रत्येक के लिए कहा जाता है देख रहा हूँ स्थान, लेकिन विजुअल स्टूडियो के भीतर यह केवल एक फ़ाइल के भीतर निदान की रिपोर्ट करता है।

यदि मैंने एक फ़ाइल में Foo के कई कार्यान्वयन किए हैं (और यह उन फाइलों की घोषणा पर रिपोर्टिंग होता है) तो मैं दोनों डायग्नोस्टिक्स की रिपोर्ट देखूंगा।

क्या मैं गलतफहमी करता हूं कि डायग्नोस्टिक्स की रिपोर्ट कैसे की जानी चाहिए या यह एक बग है? यदि यह एक बग है, तो क्या यह रोज़लिन समस्या है या क्या यह विजुअल स्टूडियो की रोज़लिन की खपत में समस्या है?

+0

क्या आपके पास आईडीई में दोनों फाइलें खुलती हैं? – SLaks

+0

हां, दोनों फाइलें खुली हैं। –

+0

मैं इसे पुन: पेश कर सकता हूं। यह मुझे एक बग की तरह लगता है। यदि आप पहले से ही इस पर कोई समस्या खोलने की अनुशंसा नहीं करेंगे: https://github.com/dotnet/roslyn/issues/ – JoshVarty

उत्तर

0

यह विजुअल स्टूडियो डायग्नोस्टिक सेवा के वी 1 कार्यान्वयन की एक सीमा है।

इस मुद्दे पर नज़र रखने के रोसलिन भंडार में एक मुद्दा नहीं है:

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

Github अंक में प्रतिक्रिया से:

यह की v1 कार्यान्वयन में एक ज्ञात समस्या है विजुअल स्टूडियो आईडीई की नैदानिक ​​सेवा। यह वर्तमान में विश्लेषण किए जा रहे दस्तावेज़ के बाहर विश्लेषक रिपोर्टिंग निदान को संभाल नहीं करता है। इसलिए, फ़ाइल 1.cs की Foo की प्राथमिक परिभाषा है जिसके लिए AnalyzeSymbol लागू किया गया था, तो डायग्नोस्टिक सेवा केवल डायग्नोस्टिक्स को को इस फ़ाइल के विश्लेषक द्वारा रिपोर्ट की गई है।

संबंधित मुद्दे