エラーと警告を報告するための C# コンパイラ オプション

以下のオプションは、コンパイラがエラーと警告を報告する方法を制御します。 新しい MSBuild 構文は、太字で示されています。 以前の csc.exe 構文は、code style で示されています。

  • WarningLevel / -warn: 警告レベルを設定します。
  • AnalysisLevel: 省略可能な警告レベルを設定します。
  • TreatWarningsAsErrors / -warnaserror: すべての警告をエラーとして扱います。
  • WarningsAsErrors / -warnaserror: 1 つ以上の警告をエラーとして扱います。
  • WarningsNotAsErrors / -warnnotaserror: 1 つ以上の警告をエラー以外として扱います。
  • NoWarn / -nowarn: 無効な警告の一覧を設定します。
  • CodeAnalysisRuleSet / -ruleset: 特定の診断を無効にするルール セット ファイルを指定します。
  • ErrorLog / -errorlog: コンパイラとアナライザーのすべての診断情報を記録するファイルを指定します。
  • ReportAnalyzer / -reportanalyzer: 実行時間など、アナライザーの追加情報を報告します。

WarningLevel

WarningLevel オプションは、コンパイラが表示する警告レベルを指定します。

<WarningLevel>3</WarningLevel>

この要素の値は、コンパイルで表示する警告レベルです。数値が小さいほど重要度が高い警告のみが表示されます。 数値が大きいほど多くの警告が表示されます。 この値は、ゼロまたは正の整数である必要があります。

警告レベル 意味
0 すべての警告メッセージの出力をオフにします。
1 重大な警告メッセージを表示します。
2 レベル 1 の警告に加え、クラス メンバーの非表示に関する警告など、より重大度の低い特定の警告を表示します。
3 レベル 2 の警告に加え、常に true または false に評価される式に関する警告など、より重大度の低い特定の警告を表示します。
4 (既定値) レベルの 3 の警告に加え、情報のための警告を表示します。

警告

コンパイラのコマンド ラインには、4 より大きい値を指定して、警告ウェーブの警告を有効にすることができます。 ただし、.NET SDK では、プロジェクト ファイル内の AnalysisLevel と一致するように WarningLevel が設定されます。

エラーまたは警告に関する情報を取得するには、ヘルプの索引でエラー コードを検索することができます。 エラーまたは警告に関する情報を取得する他の方法については、「C# コンパイラ エラー」を参照してください。 すべての警告をエラーとして扱う場合は、TreatWarningsAsErrors を使用します。 特定の警告を無効にするには、DisabledWarnings を使用します。

分析レベル

AnalysisLevel オプションは、有効にする追加の警告ウェーブとアナライザーを指定します。 警告ウェーブの警告は、コードを改善したり、今後のリリースとの互換性を確保したりする追加のチェックです。 アナライザーは、コードを改善するための lint のような機能を提供します。

<AnalysisLevel>preview</AnalysisLevel>
分析レベル 説明
5 すべての省略可能な警告ウェーブ 5 の警告を表示します。
6 すべての省略可能な警告ウェーブ 6 の警告を表示します。
7 すべての省略可能な警告ウェーブ 7 の警告を表示します。
最新 (既定値) 現在のリリースまでの (現在のリリースを含む) すべての情報レベルの警告を表示します。
preview 最新のプレビュー リリースまでの (現在のリリースを含む) すべての情報レベルの警告を表示します。
なし すべての情報レベルの警告をオフにします。

省略可能な警告の詳細については、警告ウェーブに関する記事を参照してください。

エラーまたは警告に関する情報を取得するには、ヘルプの索引でエラー コードを検索することができます。 エラーまたは警告に関する情報を取得する他の方法については、「C# コンパイラ エラー」を参照してください。 すべての警告をエラーとして扱う場合は、TreatWarningsAsErrors を使用します。 特定の警告を無効にするには、NoWarn を使用します。

TreatWarningsAsErrors

TreatWarningsAsErrors オプションは、すべての警告をエラーとして扱います。 WarningsAsErrors を使って、一部の警告だけをエラーとして設定することもできます。 TreatWarningsAsErrors を有効にすると、WarningsNotAsErrors を使用して、エラーとして扱わない警告を指定することができます。

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

すべての警告メッセージは、代わりにエラーとして報告されます。 ビルド プロセスは停止します (出力ファイルは作成されません)。 既定では、TreatWarningsAsErrors が有効になっていないため、警告により出力ファイルの生成が妨げられることはありません。 必要に応じて、いくつかの特定の警告のみをエラーとして扱う場合は、エラーとして扱う警告番号のコンマ区切りのリストを指定できます。 Nullable 短縮形を使用して、NULL 値が許容されるすべての警告のセットを指定できます。 コンパイラで表示する警告のレベルを指定するには、WarningLevel を使用します。 特定の警告を無効にするには、NoWarn を使用します。

重要

csproj ファイルで <TreatWarningsAsErrors> 要素を使う場合と、warnaserror MSBuild コマンド ライン スイッチを使う場合とでは、2 つの微妙な違いがあります。 TreatWarningsAsErrors は C# コンパイラにのみ影響し、csproj ファイル内の他の MSBuild タスクには影響しません。 warnaserror コマンド ライン スイッチは、すべてのタスクに影響します。 次に、TreatWarningsAsErrors を使う場合は、コンパイラは警告に対する出力を生成しません。 warnaserror コマンド ライン スイッチを使う場合は、コンパイラは出力を生成します。

WarningsAsErrors と WarningsNotAsErrors

WarningsAsErrors オプションと WarningsNotAsErrors オプションは、警告の一覧の TreatWarningsAsErrors オプションをオーバーライドします。 このオプションは、すべての CS 警告で使用できます。 "CS" というプレフィックスは省略可能です。 数値または "CS" の後に、エラー 番号または警告番号を指定できます。 警告に影響するその他の要素については、MSBuild の共通プロパティに関する記事を参照してください。

警告 0219 と 0168 をエラーとして有効にする場合:

<WarningsAsErrors>0219,CS0168</WarningsAsErrors>

同じ警告をエラーとして無効にする場合:

<WarningsNotAsErrors>0219,CS0168</WarningsNotAsErrors>

警告のセットをエラーとして構成するには、WarningsAsErrors を使用します。 すべての警告をエラーとして設定したときにエラーとして扱わない警告のセットを構成するには、WarningsNotAsErrors を使用します。

NoWarn

NoWarn オプションを使用すると、コンパイラから 1 つ以上の警告が表示されないようにすることができます。warningnumber1warningnumber2 はコンパイラで表示しないようにする警告番号です。 警告番号が複数ある場合は、コンマで区切ります。

<NoWarn>warningnumber1,warningnumber2</NoWarn>

警告 ID は、数値部分のみを指定します。 たとえば、CS0028 を表示しない場合は、<NoWarn>28</NoWarn> と指定します。 NoWarn に渡された警告番号が以前のリリースでは有効であったが、今は削除されている場合、コンパイラはその番号を自動的に無視します。 たとえば、CS0679 は Visual Studio .NET 2002 のコンパイラでは有効でしたが、その後削除されました。

NoWarn オプションでは、次の警告は抑制されません。

  • コンパイラの警告 (レベル 1) CS2002
  • コンパイラの警告 (レベル 1) CS2023
  • コンパイラの警告 (レベル 1) CS2029

警告は、コードに潜在的な問題があることを示すものであるため、特定の警告を無効にすることによるリスクを理解する必要があることに注意してください。 NoWarn は、警告が擬陽性であり、実行時のバグである可能性がないと確信している場合にのみ使用します。

警告を無効にするときに、以下のようなさらに対象を絞ったアプローチを使用することが必要になる場合があります。

  • ほとんどのコンパイラには、特定のコード行のみ警告を無効にする方法が用意されており、同じプロジェクト内の他の場所で警告が発生した場合でも、その警告を確認できます。 C# のコードの特定の部分でのみ警告を抑制するには、#pragma warning を使用します。

  • ビルド ログの出力をより簡潔で焦点を絞ったものにする場合は、ビルド ログの詳細を変更する必要があります。 詳細については、ビルド ログ ファイルを表示、保存、および構成する」をご覧ください。

NoWarn に以前に設定された値に対して、上書きせずに警告番号を追加するには、次の例に示すように $(NoWarn) を参照します。

   <NoWarn>$(NoWarn);newwarningnumber3;newwarningnumber4</NoWarn>

CodeAnalysisRuleSet

特定の診断を構成するルール セット ファイルを指定します。

<CodeAnalysisRuleSet>MyConfiguration.ruleset</CodeAnalysisRuleSet>

ここで、MyConfiguration.ruleset はルール セット ファイルへのパスです。 ルール セットの使用方法の詳細については、ルール セットに関する Visual Studio のドキュメントを参照してください。

ErrorLog

コンパイラとアナライザーのすべての診断情報を記録するファイルを指定します。

<ErrorLog>compiler-diagnostics.sarif</ErrorLog>

ErrorLog オプションを指定すると、コンパイラによって Static Analysis Results Interchange Format (SARIF) ログが出力されます。 通常、SARIF ログは、コンパイラとアナライザーの診断情報から結果を分析するツールによって読み取られます。

ErrorLog 要素への version 引数を使用して、SARIF 形式を指定できます。

<ErrorLog>logVersion21.json,version=2.1</ErrorLog>

区切り記号には、コンマ (,) またはセミコロン (;) を使用できます。 バージョンの有効な値は、"1"、"2"、"2.1" です。 既定値は "1" です。 "2" と "2.1" は、どちらも SARIF バージョン 2.1.0 を意味します。

ReportAnalyzer

実行時間など、アナライザーの追加情報を報告します。

<ReportAnalyzer>true</ReportAnalyzer>

ReportAnalyzer オプションを指定すると、コンパイラによって、ビルド内のアナライザーのパフォーマンス特性を詳細に示す追加の MSBuild ログ情報が生成されます。 これは通常、アナライザーの検証の一部として、アナライザーの作成者によって使用されます。

重要

このフラグによって生成される追加のログ情報は、-verbosity:detailed コマンド ライン オプションを使用する場合にのみ生成されます。 詳細については、MSBuild ドキュメントのスイッチに関する記事を参照してください。