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

本文介绍在生成 .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

可以使用 a SuppressMessageAttribute 来禁止在源文件或项目的全局抑制文件中显示警告(GlobalSuppressions.csGlobalSuppressions.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")]

属性中,使用您要引用的 API 的 Target。 有关文档 ID 的信息,请参阅 文档 ID 格式

若要对未映射到显式提供的用户源的编译器生成代码抑制警告,必须将抑制特性放置在全局抑制文件中。 例如,以下代码消除对由编译器生成的构造函数的违规:

[module: SuppressMessage("Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="MyTools.Type..ctor()")]

另请参阅