次の方法で共有


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

以下のオプションは、コンパイラがエラーと警告を報告する方法を制御します。

MSBuild 構文 csc.exe 構文 説明
WarningLevel -warn 警告レベルを設定します。 詳しくは、以下をご覧ください。
AnalysisLevel / オプションの警告レベルを設定します。 詳しくは、以下をご覧ください。
TreatWarningsAsErrors -warnaserror すべての警告をエラーとして扱います。 詳しくは、以下をご覧ください。
WarningsAsErrors -warnaserror+ 1 つ以上の警告をエラーとして扱います。 詳しくは、以下をご覧ください。
WarningsNotAsErrors -warnaserror- 1 つ以上の警告をエラーとして扱わない。 詳しくは、以下をご覧ください。
NoWarn -nowarn 無効な警告の一覧を設定します。 詳しくは、以下をご覧ください。
CodeAnalysisRuleSet -ruleset 特定の診断を無効にするルールセット ファイルを指定します。 詳しくは、以下をご覧ください。
ErrorLog -errorlog コンパイラとアナライザーのすべての診断情報を記録するファイルを指定します。 詳しくは、以下をご覧ください。
ReportAnalyzer -reportanalyzer 実行時間などの追加のアナライザー情報を報告します。 詳しくは、以下をご覧ください。

プロジェクトに対してこれらのオプションを構成する方法の詳細については、「 コンパイラ オプション」を参照してください。 使用可能なスイッチの詳細については、Visual Studio ドキュメントの MSBuild コマンド ライン スイッチ に関する記事を参照してください。

警告レベル

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

<WarningLevel>3</WarningLevel>

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

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

警告

コンパイラのコマンド ラインには、4 より大きい値を指定して、警告ウェーブの警告を有効にすることができます。

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

分析レベル

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

.NET 7 SDK 以降では、 AnalysisLevelWarningLevel は次の規則に基づいて設定されます。

  • 既定の AnalysisLevel は、プロジェクト ファイルのターゲット フレームワーク モニカー (TFM) と一致します。
  • 既定の WarningLevel は AnalysisLevel の値と一致 します
  • .NET Framework プロジェクトの既定の WarningLevel は 4 です。

.NET 7 SDK の前に、 AnalysisLevel が WarningLevel を上書き しました

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

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

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

警告をエラーとして扱う

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

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

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

重要

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

WarningsAsErrors と WarningsNotAsErrors

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

警告 0219、0168、および Null 許容のすべての警告をエラーとして有効にする場合:

<WarningsAsErrors>0219;CS0168;nullable</WarningsAsErrors>

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

<WarningsNotAsErrors>0219;CS0168;nullable</WarningsNotAsErrors>

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

警告なし

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

<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>MyConfiguration.ruleset</CodeAnalysisRuleSet>

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

エラーログ

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

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

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

version 要素への ErrorLog 引数を使用して、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 ドキュメントの スイッチ に関する記事を参照してください。