この記事では、.NET アプリをビルドするときにコード分析からの警告を抑制するさまざまな方法について説明します。 ここで提供されている情報を使用して、コード品質規則、コード スタイル 規則、およびサード パーティのアナライザー ルールを抑制できます。
ヒント
開発環境として Visual Studio を使用している場合は、 電球 メニューに、警告を表示しないコードを生成するオプションが表示されます。 詳細については、「違反の 抑制」を参照してください。
ルールを無効にする
警告の原因となっているルールを無効にするには、その重大度を EditorConfig または AnalyzerConfig none
でに設定します。 このアクションにより、使用する構成ファイルのスコープに応じて、ファイルまたはプロジェクト全体のルールが無効になります。
[*.{cs,vb}]
dotnet_diagnostic.<rule-ID>.severity = none
ルールの重要度の詳細については、「ルールの重要度 を構成する」を参照してください。
プリプロセッサ ディレクティブを使用する
特定のコード行に対してのみ警告を抑制するには、 #pragma 警告 (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 つの位置指定パラメーターは、ルールのカテゴリとルール 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()")]
こちらも参照ください
.NET