C# 代码分析和SupersMessage-是否应使用#if DEBUG包装属性
我正在研究使用SupersMessage来获取一些CA警告。SupersMessage的文档说要确保它不在发布版本中。相应地,supersMessage属性是否应包装在#if DEBUG中,如下所示C# 代码分析和SupersMessage-是否应使用#if DEBUG包装属性,c#,visual-studio-2015,code-analysis,roslyn,C#,Visual Studio 2015,Code Analysis,Roslyn,我正在研究使用SupersMessage来获取一些CA警告。SupersMessage的文档说要确保它不在发布版本中。相应地,supersMessage属性是否应包装在#if DEBUG中,如下所示 public class Class1 { #if DEBUG [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "
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;
}
}
参考:有关更多信息,请参阅
您不应在发布版本上使用源代码内抑制,以防止意外传送源代码内抑制元数据。由于源代码内抑制的处理成本,还可以通过包含源代码内抑制元数据来降低应用程序的性能
不,你不应该。只需确保发布版本未定义条件编译符号
code\u ANALYSIS
原因是SuppressMessageAttribute
有一个[ConditionalAttribute(“code\u ANALYSIS”)]
,这意味着它不会包含在输出DLL中,除非定义了code\u ANALYSIS
正如上面所说:
将ConditionalAttribute应用于属性表示除非定义了条件编译符号,否则不应将该属性发送到元数据
请注意,打开“在生成时启用代码分析”可能会将条件编译符号
Code\u Analysis
添加到生成设置中,因此请确保在发布生成时不是这样。文档还声明属性类的属性为[条件属性(“代码分析”)]
,从来没有考虑过这一点,但也许它不在发布版本中?