2017-10-18 32 views
5

Neden bu sonlandırıcı hakkında VS şikayet ediyor?CA1821 empty Finalizers'ı Kaldır

VS 2017 - 15.3.5
Microsoft Kod Analizi 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

kodu, kod değil görüntülerini gönderin. –

+2

Yani, bu hata ayıklama veya sürüm oluşturmada gerçekleşir mi? Ya da ikisinde de olabilir? – Evk

+1

@Evk: Her iki durumda da, Serbest Bırakma (değiştirilmemiş DEBUG sabiti) olarak değiştirdiğimde - "DEBUG" ve "endif" ifadeleri arasındaki metin grileştirilmez. – apocalypse

cevap

7

Bu a bug in the Analyzer olarak görünüyor. sayısında 23 Haziran comment itibaren

:

@nguerrera teşekkür, sen analizörü sürüm oluşturma geçerli bir sorunu bildirip bildirmediğini haklısın. Bununla birlikte, analizörde hala bir sorun var - eğer kapatma yöntemi de şartlı olarak hariç tutulursa ateşlememelidir. Örneğin, aşağıdakiler, tanılama ve hata ayıklama oluşturma işlemlerinde tanılamayı yine de tetikler.

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

Bence çözüm bu. Ama burada 2 tane hata var. İkincisi ise, serbest bırakma moduna geçtiğimde, metin, ... endif'le ancak NET framework projesinde, NET çekirdek projesinde değil, ... – apocalypse

+0

makinemde denedim. Önişlemci yönergeleri içindeki kod grileşmiş olmalıydı, ancak değil (VS hata?). Ancak, her iki yapılandırmayı oluşturduğumda ve bunları ILDASM'de açtığımda, Finalize() yönteminin yayınlama grubundan hariç tutulduğunu görebilirsiniz. –

+2

serbest bırakmak için değiştirirseniz ve VS'yi yeniden başlatırsanız, gri olur. Ayrıca, Hata Ayıklama'ya geri dönmek isterseniz, ayrıca VS'yi yeniden başlatmanız gerekir. Ama bu sadece görsel efekttir. – apocalypse