コード分析の構成オプション

コード分析ルールには、さまざまな構成オプションが用意されています。 これらのオプションの一部は、<option key> = <option value> という構文を使用して、アナライザー構成ファイル内のキーと値のペアとして指定されます。 コード分析全体を構成するその他のオプションは、プロジェクト ファイルの MSBuild プロパティとして入手できます。

最も一般的に構成されるオプションは、ルールの重大度です。 コード品質ルールコード スタイル ルールなどのすべてのルールについて、重大度レベルを構成できます。 たとえば、あるルールを警告として有効にするには、次のキーと値のペアをアナライザー構成ファイルに追加します。

dotnet_diagnostic.<rule ID>.severity = warning

追加のオプションを構成して、ルールの動作をカスタマイズすることもできます。

  • コード品質ルールには、ルールを適用する必要があるメソッド名などの動作オプションがあります。
  • コード スタイル ルールには、改行が必要な場所などのスタイル設定オプションがあります。
  • サード パーティのアナライザー ルールでは、カスタムのキー名と値の形式を使用して、独自の構成オプションを定義できます。

[全般] オプション

これらのオプションは、コード分析全体に適用されます。 特定のルールにのみ適用することはできません。

追加のオプションについては、「コード分析のプロパティ」を参照してください。

分析モード

.NET SDK にはすべてのコード分析ルールが含まれていますが、既定で有効になっているのはその一部のみです。 "分析モード" は、存在する場合に有効にするルールのセットを決定します。 ほとんどまたはすべてのルールを有効にする、より積極的な分析モードを選択できます。 または、ほとんどまたはすべてのルールを無効にする、より控えめな分析モードを選択でき、次に必要に応じて特定のルールを選択できます。 プロジェクト ファイルに <AnalysisMode> MSBuild プロパティを追加することで、分析モードを設定します。

<PropertyGroup>
  <AnalysisMode>Recommended</AnalysisMode>
</PropertyGroup>

.NET 6 以降では、<AnalysisMode<Category>> MSBuild プロパティを使用して、ルールのカテゴリを一括で有効にすることもできます。

Note

AnalysisMode などの MSBuild プロパティを使用してコード分析を構成する場合、構成ファイルで設定した "一括" 構成オプションは無視されます。 たとえば、.editorconfig ファイル内のすべてのルールまたはルールのカテゴリを一括で有効にした場合、その構成は無視されます。

コード分析の有効化

コード分析は、既定で .NET 5 以降のバージョンを対象とするプロジェクトで有効になっています。 .NET 5 以上の SDK を使用しているが、プロジェクトが別の .NET 実装をターゲットとしている場合は、お使いのプロジェクト ファイルの EnableNETAnalyzers プロパティを true に設定することにより、コード分析を手動で有効にすることができます。

<PropertyGroup>
  <EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>

生成されたコードを除外する

.NET コード アナライザーの警告は、デザイナーで生成されたファイルなどの、ユーザーが編集して違反を修正することのできない生成されたコード ファイルに対しては役立ちません。 ほとんどの場合、コード アナライザーは生成されたコード ファイルをスキップし、これらのファイルに関する違反を報告しません。

既定では、特定のファイル拡張子または自動生成されたファイル ヘッダーを持つファイルは、生成されたコード ファイルとして扱われます。 たとえば、.designer.cs または .generated.cs で終わるファイル名は、生成されたコードと見なされます。 この構成オプションを使用すると、生成されたコードとして扱う追加の名前付けパターンを指定できます。 generated_code = true | false エントリを構成ファイルに追加することで、追加のファイルやフォルダーを構成することができます。 たとえば、名前が .MyGenerated.cs で終わるすべてのファイルを生成されたコードとして扱うには、次のエントリを追加します。

[*.MyGenerated.cs]
generated_code = true

ルール固有のオプション

ルール固有のオプションは、1 つのルール、ルール セット、またはすべてのルールに適用できます。 ルール固有のオプションには、次のものがあります。

重大度レベル

次の表に、コード品質ルールやコード スタイルルールなどのすべてのアナライザー ルールに対して構成できる、さまざまなルールの重大度を示します。

重大度の構成値 ビルド時の動作
error 違反はビルドの "エラー" として表示され、ビルドは失敗します。
warning 違反はビルドの "警告" として表示されますが、ビルドは失敗しません (警告をエラーとして扱うようにオプションで設定している場合を除く)。
suggestion 違反はビルドの "メッセージ" として表示され、Visual Studio IDE に修正候補として表示されます。 (Visual Studio では、候補は最初の 2 文字の下の 3 つの灰色のドットとして表示されます。)
silent 違反はユーザーに表示されません。

ただし、コード スタイル規則の場合は、Visual Studio のコード生成機能はやはりこのスタイルでコードを生成します。 これらの規則はクリーンアップにも含まれ、Visual Studio の [クイック アクションとリファクタリング] メニューに表示されます。
none 規則は完全に抑制されます。

ただし、コード スタイル規則の場合は、Visual Studio のコード生成機能はやはりこのスタイルでコードを生成します。
default ルールの既定の重大度が使用されます。 各 .NET リリースの既定の重大度は、roslyn-analyzers リポジトリに一覧で示されています。 その表で、Disabled は none に、Hidden は silent に、Info は suggestion に相当します。

範囲

  • 1 つのルール

    1 つのルールに対してルールの重大度を設定するには、次の構文を使用します。

    dotnet_diagnostic.<rule ID>.severity = <severity value>
    
  • ルールのカテゴリ

    ルールのカテゴリに対して既定のルールの重大度を設定するには、次の構文を使用します。 ただし、この重大度設定は、既定で有効になるカテゴリのルールにのみ影響を与えます。

    dotnet_analyzer_diagnostic.category-<rule category>.severity = <severity value>
    

    さまざまなカテゴリの一覧と説明については、「ルール カテゴリ」を参照してください。 さらに、この参照ページでは、特定のルールのカテゴリ (たとえば CA1000 など) を確認できます。

  • すべてのルール

    すべてのアナライザー ルールに対して既定のルールの重大度を設定するには、次の構文を使用します。 ただし、この重大度設定は、既定で有効になるルールにのみ影響を与えます。

    dotnet_analyzer_diagnostic.severity = <severity value>
    

重要

ルールの "カテゴリ" または "すべて" のルールに対して、1 つのエントリで複数のルールの重大度レベルを構成する場合、その重大度は既定で有効であるルールに対してのみ適用されます。 また、MSBuild プロパティ <AnalysisMode> または <AnalysisLevel> を使用してすべてのルールを有効にした場合、一括 dotnet_analyzer_diagnostic オプションは無視されます。 このため、<AnalysisMode<Category>>All に設定して、ルールのカテゴリを有効にすることをお勧めします。

Note

1 つの規則に重大度を設定するためのプレフィックス dotnet_diagnostic は、カテゴリ経由で、またはすべての規則に重大度を設定するためのプレフィックス dotnet_analyzer_diagnostic とは少し異なります。

優先順位

同一のルール ID に適用できる重大度構成エントリが複数ある場合は、次の順序で優先順位が選択されます。

  • カテゴリに対するエントリは、すべてのアナライザー ルールに対するエントリよりも優先されます。
  • ID に基づく個々のルールに対するエントリは、カテゴリに対するエントリよりも優先されます。

次の例を考えてみましょう。CA1822 はカテゴリが "パフォーマンス" に指定されています。

[*.cs]
dotnet_diagnostic.CA1822.severity = error
dotnet_analyzer_diagnostic.category-performance.severity = warning
dotnet_analyzer_diagnostic.severity = suggestion

前の例では、3 つの重大度エントリすべてが CA1822 に適用できます。 ただし、指定した優先順位ルールを使用すると、最初のルール ID ベースのエントリが次のエントリに優先されます。 この例の場合、CA1822 の有効な重大度は error です。 "パフォーマンス" カテゴリに含まれる他のすべてのルールは重大度が warning です。

ファイル間で優先度が決まる方法の詳細については、構成ファイルに関する記事の「優先順位」セクションを参照してください。