我正在使用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
您不应在发布版本上使用源内抑制,以防止意外传送源内抑制元数据。由于源内抑制的处理成本,通过包含源内抑制元数据,您的应用程序的性能也会降低。
答案 0 :(得分:2)
CODE_ANALYSIS
。
原因是SuppressMessageAttribute
有一个[ConditionalAttribute("CODE_ANALYSIS")]
,这意味着它不会包含在输出DLL中,除非定义了CODE_ANALYSIS
。
正如the documentation所说:
将ConditionalAttribute应用于属性表示除非定义了条件编译符号,否则不应将该属性发送到元数据。
请注意,启用“在构建时启用代码分析”可能会将条件编译符号CODE_ANALYSIS
添加到构建设置中,因此请确保在发布版本中不是这种情况。