2017-10-18 35 views
5

क्यों वीएस इस अंतिमकर्ता के बारे में शिकायत करता है?CA1821 खाली निकालें निकालें

वी.एस. 2017 - 15.3.5
माइक्रोसॉफ्ट कोड विश्लेषण 2017 - 2.3.0.62003

using System; 

namespace ConsoleApp 
{ 
    class DisposableClass : IDisposable 
    { 
#if DEBUG 
     ~DisposableClass() // CA1821 Remove empty Finalizers 
     { 
      System.Diagnostics.Debug.Fail ("Forgot Dispose?"); 
     } 
#endif 

     public void Dispose() 
     { 
#if DEBUG 
      GC.SuppressFinalize (this); 
#endif 
     } 
    } 

    class Program 
    { 
     static void Main (string[] args) 
     { 
      Console.WriteLine ("Hello World!"); 
     } 
    } 
} 
+3

कृपया कोड पोस्ट करें, कोड की छवियों को नहीं। –

+2

तो, क्या यह डीबग या रिलीज बिल्ड में होता है? या दोनों में शायद? – Evk

+1

@Evk: दोनों में, जब मैं रिलीज में बदल जाता हूं (अनचेक डीबीयूजी स्थिर) - 'अगर DEBUG' और' endif' के बीच का पाठ भूरे रंग से बाहर नहीं है। – apocalypse

उत्तर

7

यह a bug in the Analyzer लग रहा है।

अंक में जून 23 टिप्पणी से:

@nguerrera धन्यवाद, आप सही है कि विश्लेषक रिलीज निर्माण पर एक मान्य समस्या रिपोर्ट कर रहा है कर रहे हैं। हालांकि, विश्लेषक में अभी भी एक मुद्दा है - अगर संलग्न विधि को भी सशर्त रूप से बाहर रखा गया है तो उसे आग नहीं लगनी चाहिए। उदाहरण के लिए, निम्नलिखित रिलीज और डीबग बिल्ड दोनों में निदान को अभी भी फायर करता है।

#if DEBUG 
    ~InvisibleEditor() 
    { 
     Debug.Assert(Environment.HasShutdownStarted, GetType().Name + " was leaked without Dispose being called."); 
    } 
#endif 
+0

मुझे लगता है कि यह समाधान है। लेकिन हमारे पास 2 बग हैं। दूसरा यह है कि जब मैं रिलीज मोड में बदल जाता हूं, तो टेक्स्ट ... एंडिफ़ के बीच धूसर हो जाता है लेकिन केवल नेट फ्रेमवर्क प्रोजेक्ट में, नेट कोर प्रोजेक्ट में नहीं ... – apocalypse

+0

मैंने अपनी मशीन पर कोशिश की। प्रीप्रोसेसर निर्देशों के अंदर कोड ग्रे हो गया था, लेकिन नहीं था (वीएस बग?)। हालांकि, जब मैंने दोनों कॉन्फ़िगरेशन बनाए और ILDASM में उन्हें खोल दिया, तो आप देख सकते हैं कि अंतिम() विधि को रिलीज़ असेंबली से बाहर रखा गया था। –

+2

यदि आप रिलीज में बदलते हैं, और फिर वीएस को पुनरारंभ करें, तो यह भूरे रंग से बाहर हो जाएगा। और यदि आप डीबग में वापस बदलना चाहते हैं, तो आपको वीएस को पुनरारंभ करने की भी आवश्यकता है। लेकिन यह सिर्फ दृश्य प्रभाव है। – apocalypse

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