コード分析の警告を抑制する方法

この記事では、.NET アプリのビルド時にコード分析からの警告を抑制するためのさまざまな方法について説明します。 ここに記載されている情報を使用して、コード品質規則、コード スタイル規則、サードパーティのアナライザーの規則を抑制できます。

ヒント

開発環境として Visual Studio を使用している場合、"電球" メニューに、警告を非表示にするコードを生成するオプションが用意されています。 詳細については、「違反を抑制する」を参照してください。

規則を無効にする

EditorConfig または AnalyzerConfig のnone構成ファイルで重大度を に設定することで、警告の原因となっているルールを無効にすることができます。 このアクションにより、使用する構成ファイルのスコープに応じて、ファイルまたはプロジェクト全体のルールが無効になります。

[*.{cs,vb}]
dotnet_diagnostic.<rule-ID>.severity = none

規則の重大度の詳細については、規則の重大度の構成に関するセクションを参照してください。

プリプロセッサ ディレクティブを使用する

#pragma warning (C#) または Disable (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 属性の 2 つの必須の位置指定パラメーターは、規則の categoryrule 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")]

Target 属性で参照する API の "ドキュメント ID" を使用します。 ドキュメント ID の詳細については、ドキュメント ID 形式に関する記事を参照してください。

明示的に指定されたユーザー ソースにマップされない、コンパイラによって生成されるコードの警告を抑制するには、抑制属性をグローバル抑制ファイル内に配置する必要があります。 たとえば、次のコードは、コンパイラによって出力されたコンストラクターに対する違反を抑制します。

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

関連項目