我正在使用SupressMessage查看一些CA警告。 SupressMessage的文档说以确保其不在发行版本中。因此,是否应按以下方式将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
您不应在发行版本上使用源内抑制,以防止意外交付源内抑制元数据。由于源内抑制的处理成本较高,因此,通过包含源内抑制元数据,还可能降低应用程序的性能。
最佳答案
不,你不应该。只要确保您的发布版本未定义条件编译符号CODE_ANALYSIS
。
原因是SuppressMessageAttribute
有一个[ConditionalAttribute("CODE_ANALYSIS")]
,这意味着除非定义了CODE_ANALYSIS
,否则它不会包含在输出DLL中。
正如the documentation所说:
将ConditionalAttribute应用于属性表示除非定义了条件编译符号,否则不应将属性发射给元数据。
请注意,启用“在构建上启用代码分析”可能会将条件编译符号CODE_ANALYSIS
添加到您的构建设置中,因此请确保发行版本中没有这种情况。