如何禁止显示代码分析警告

本文介绍了在开发 .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()")]

另请参阅