エラーと警告を報告するための 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 を使用します。
分析レベル
分析レベル | 説明 |
---|---|
5 | すべての省略可能な警告ウェーブ 5 の警告を表示します。 |
6 | すべての省略可能な警告ウェーブ 6 の警告を表示します。 |
7 | すべての省略可能な警告ウェーブ 7 の警告を表示します。 |
最新 (既定値) | 現在のリリースまでの (現在のリリースを含む) すべての情報レベルの警告を表示します。 |
preview | 最新のプレビュー リリースまでの (現在のリリースを含む) すべての情報レベルの警告を表示します。 |
なし | すべての情報レベルの警告をオフにします。 |
省略可能な警告の詳細については、警告ウェーブに関する記事を参照してください。
エラーまたは警告に関する情報を取得するには、ヘルプの索引でエラー コードを検索することができます。 エラーまたは警告に関する情報を取得する他の方法については、「C# コンパイラ エラー」を参照してください。 すべての警告をエラーとして扱う場合は、TreatWarningsAsErrors を使用します。 特定の警告を無効にするには、 NoWarn を使用します。
TreatWarningsAsErrors
TreatWarningsAsErrors オプションは、すべての警告をエラーとして扱います。 TreatWarningsAsErrors を使用して、一部の警告だけをエラーとして設定することもできます。 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 つ以上の警告が表示されないようにすることができます。 警告番号が複数ある場合は、コンマで区切ります。
<NoWarn>number1, number2</NoWarn>
number1
と number2
は、コンパイラで表示しないようにする警告番号です。 警告 ID の数値を指定します。 たとえば、CS0028 を表示しない場合は、<NoWarn>28</NoWarn>
と指定します。 コンパイラは、以前のリリースで有効であったが削除された NoWarn に渡された警告番号を警告なしで無視します。 たとえば、CS0679 は Visual Studio .NET 2002 のコンパイラでは有効でしたが、その後削除されました。
次の警告は 、NoWarn オプションでは抑制できません。
- コンパイラの警告 (レベル 1) CS2002
- コンパイラの警告 (レベル 1) CS2023
- コンパイラの警告 (レベル 1) CS2029
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 ドキュメントの スイッチ に関する記事を参照してください。