2016-10-18 6 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 к атрибуту означает, что атрибут не должен излучаться в метаданных, если символ условной компиляции не определен.

Имейте в виду, что включение «Включить анализ кода на Build» может добавить условный символ компиляции CODE_ANALYSIS в настройках сборки, поэтому убедитесь, что это не так на вашей сборки выпуска.

+0

спасибо @kris. очень признателен. –