2016-10-18 44 views
2

我正在看使用SupressMessage吃一些CA警告。 SupressMessage的文檔說確保它不在發佈版本中。因此,SupressMessage屬性應該如下包裝在#if DEBUG中?代碼分析和SupressMessage - 如果你用#if包裝屬性DEBUG

public class Class1 
{ 
#if DEBUG 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "args")] 
#endif 
    static void Main(string[] args) { } 

#if DEBUG 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
    "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Guid")] 
#endif 
    public static bool IsValidGuid(string guid) 
    { 
     try 
     { 
      new Guid(guid); //Causes CA1806: DoNotIgnoreMethodResults 
      return true; 
     } 
     catch (ArgumentNullException) { } 
     catch (OverflowException) { } 
     catch (FormatException) { } 
     return false; 
    } 
} 

參考:有關詳細信息,請參閱https://msdn.microsoft.com/en-us/library/ms244717.aspx

你不應該發佈使用源鎮壓建立以防止意外出貨的,源抑制的元數據。由於源內抑制的處理成本,應用程序的性能也可能因包含源內抑制元數據而降低。

+1

該文檔還指出,屬性類是由'[ConditionalAttribute(「CODE_ANALYSIS」)]'歸屬的,從來沒有打擾過這一點,但也許它不在發佈版本呢? –

回答

2

不,你不應該。只要確保您的發佈版本不定義條件編譯符號CODE_ANALYSIS

原因是SuppressMessageAttribute有一個[ConditionalAttribute("CODE_ANALYSIS")],這意味着它不會被包含在輸出DLL中,除非定義了CODE_ANALYSIS

作爲the documentation說:

應用ConditionalAttribute到屬性指示該屬性不應該被髮射到的元數據,除非條件編譯符號被定義。

注意,打開「啓用代碼分析上構建」可在條件編譯符號CODE_ANALYSIS添加到您的生成設置,所以要確保不在你的發佈版本的情況。

+0

謝謝@kris。非常感激。 –