如何禁止显示代码分析警告
本文介绍了在开发 .NET 应用时抑制代码分析警告的不同方法。 可以使用此处提供的信息禁止显示代码质量规则、代码样式规则和第三方分析器规则。
提示
如果使用 Visual Studio 作为开发环境,灯泡菜单可提供一些选项来生成用于抑制警告的代码。 有关详细信息,请参阅抑制冲突。
禁用规则
可以通过在 EditorConfig 或 AnalyzerConfig 配置文件中将严重性设置为 none
来禁用导致警告的规则。 此操作将禁用整个文件或项目的规则,具体取决于使用的配置文件的范围。
[*.{cs,vb}]
dotnet_diagnostic.<rule-ID>.severity = none
有关规则严重性的详细信息,请参阅配置规则严重性。
使用预处理器指令
使用 #pragma 警告 (C#) 或禁用 (Visual Basic) 指令来仅抑制特定代码行的警告。
try { ... }
catch (Exception e)
{
#pragma warning disable CA2200 // Rethrow to preserve stack details
throw e;
#pragma warning restore CA2200 // Rethrow to preserve stack details
}
Try
...
Catch e As Exception
#Disable Warning CA2200 ' Rethrow to preserve stack details
Throw e
#Enable Warning CA2200 ' Rethrow to preserve stack details
End Try
使用 SuppressMessageAttribute
可以使用 SuppressMessageAttribute 在源文件中或项目的全局抑制文件(GlobalSuppressions.cs 或 GlobalSuppressions.vb)中抑制警告 。 此特性提供了一种仅在项目或文件的特定部分抑制警告的方法。
SuppressMessageAttribute 特性的两个必需的位置参数 是:规则的类别和规则 ID 。 下面的代码片段传递这些参数的 "Usage"
和 "CA2200:Rethrow to preserve stack details"
。
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2200:Rethrow to preserve stack details", Justification = "Not production code.")]
private static void IgnorableCharacters()
{
try
{
...
}
catch (Exception e)
{
throw e;
}
}
如果将该特性添加到全局抑制文件中,则会将抑制的作用域设置到所需的级别,例如 "member"
。 使用 Target 属性指定应抑制其警告的 API。
[assembly: SuppressMessage("Usage", "CA2200:Rethrow to preserve stack details", Justification = "Not production code.", Scope = "member", Target = "~M:MyApp.Program.IgnorableCharacters")]
将文档 ID 用于要在 Target
属性中引用的 API。 有关文档 ID 的信息,请参阅文档 ID 格式。
若要对未映射到显式提供的用户源的编译器生成代码抑制警告,必须将抑制特性放置在全局抑制文件中。 例如,下面的代码将抑制针对编译器发出的构造函数的冲突:
[module: SuppressMessage("Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="MyTools.Type..ctor()")]