.NET のコンパイラ プラットフォーム (Roslyn) アナライザーでは、お使いの C# または Visual Basic コードについて、コードの品質やスタイルに関する問題を検査できます。 これらのアナライザーは .NET SDK に含まれており、個別にインストールする必要はありません。 プロジェクトが .NET 5 以降をターゲットとしている場合は、既定でコード分析が有効になっています。 (.NET Framework を対象とするプロジェクトでコード分析を有効にする方法については、「 レガシ プロジェクトでコード分析を有効にする」を参照してください)。
アナライザーによってルール違反が検出されると、各ルールの構成方法に応じて、修正候補、警告、またはエラーとして報告されます。 コード分析違反は、コンパイラ エラーと区別するために "CA" または "IDE" というプレフィックスで示されます。
コード品質の分析
              コード品質の分析 ("CAxxxx") ルールでは、お使いの C# コードまたは Visual Basic コードにセキュリティ、パフォーマンス、設計などの問題がないか検査が行われます。 分析は、.NET 5 以降をターゲットとするプロジェクトで既定で有効になっています。 
              EnableNETAnalyzers プロパティを true に設定すると、以前のバージョンの .NET を対象とするプロジェクトでコード分析を有効にできます。 
              EnableNETAnalyzers を false に設定すると、自分のプロジェクトでコード分析を無効にすることもできます。
ヒント
Visual Studio を使用している場合、多くのアナライザー ルールには、問題を自動的に修正するために適用できるコード修正 
有効なルール
.NET 9 では、次の規則が既定でエラーまたは警告として有効になっています。 他の規則は、提案として有効になっています。
| 診断 ID | カテゴリ | 重要度 | 追加されたバージョン | 説明 | 
|---|---|---|---|---|
| CA1416 | 相互運用性 | 警告 | .NET 5 | プラットフォームの互換性を検証する | 
| CA1417 | 相互運用性 | 警告 | .NET 5 | P/Invoke の文字列パラメーターに OutAttributeを使用しないでください | 
| CA1418 | 相互運用性 | 警告 | .NET 6 | 有効なプラットフォーム文字列を使用します | 
| CA1420 | 相互運用性 | 警告 | .NET 7 | ランタイム マーシャリングが無効になっているときにそれを必要とする機能を使用すると、実行時例外が発生する | 
| CA1422 | 相互運用性 | 警告 | .NET 7 | プラットフォームの互換性を検証する | 
| CA1831 | パフォーマンス | 警告 | .NET 5 | 該当する場合、文字列に範囲ベースのインデクサーの代わりに AsSpanを使用します | 
| CA1856 | パフォーマンス | エラー | .NET 8 | ConstantExpected属性の使用に誤りがあります | 
| CA1857 | パフォーマンス | 警告 | .NET 8 | パラメーターには定数が必要です | 
| CA2013 | 信頼性 | 警告 | .NET 5 | 値の型に ReferenceEqualsを使用しないでください | 
| CA2014 | 信頼性 | 警告 | .NET 5 | ループで stackallocを使用しないでください | 
| CA2015 | 信頼性 | 警告 | .NET 5 | MemoryManager<T> から派生した型にはファイナライザーを定義しないでください | 
| CA2017 | 信頼性 | 警告 | .NET 6 | パラメーター カウントが一致しません | 
| CA2018 | 信頼性 | 警告 | .NET 6 | countに対する引数Buffer.BlockCopyで、コピーするバイト数を指定する必要があります | 
| CA2021 | 信頼性 | 警告 | .NET 8 | 互換性のない型を指定して Enumerable.Cast<T>またはEnumerable.OfType<T>を呼び出さないでください | 
| CA2022 | 信頼性 | 警告 | .NET 9 | で読み取りを不正確にしないようにする Stream.Read | 
| CA2200 | 使用方法 | 警告 | .NET 5 | スタック詳細を保持するために再度スローします | 
| CA2247 | 使用方法 | 警告 | .NET 5 | TaskCompletionSourceコンストラクターに渡される引数は、TaskCreationOptions ではなく TaskContinuationOptions 列挙型にする必要があります | 
| CA2252 | 使用方法 | エラー | .NET 6 | プレビュー機能をオプトインします | 
| CA2255 | 使用方法 | 警告 | .NET 6 | ModuleInitializer属性をライブラリ内で使用しないでください | 
| CA2256 | 使用方法 | 警告 | .NET 6 | 親インターフェイスで宣言されたメンバーはすべて、 DynamicInterfaceCastableImplementation属性インターフェイスに実装されている必要があります | 
| CA2257 | 使用方法 | 警告 | .NET 6 | DynamicInterfaceCastableImplementationAttributeを持つインターフェイスで定義されるメンバーは、staticとする必要があります | 
| CA2258 | 使用方法 | 警告 | .NET 6 | Visual Basic で DynamicInterfaceCastableImplementationインターフェイスを指定することは、サポートされていません | 
| CA2259 | 使用方法 | 警告 | .NET 7 | ThreadStaticは静的フィールドにのみ影響します | 
| CA2260 | 使用方法 | 警告 | .NET 7 | 正しい種類のパラメーターを使用する | 
| CA2261 | 使用方法 | 警告 | .NET 8 | ConfigureAwaitOptions.SuppressThrowingをTask<TResult>と共に使用しないでください | 
| CA2264 | 使用方法 | 警告 | .NET 9 | null 非許容値を 〗〘〗 ArgumentNullException.ThrowIfNull | 
| CA2265 | 使用方法 | 警告 | .NET 9 | Span<T>とnullを比較しないdefault | 
これらのルールの重要度を変更して、無効にするか、エラーに昇格させることができます。 追加のルールを有効にすることもできます。
- 各 .NET SDK バージョンに含まれるルールの一覧については、アナライザーのリリースに関するページを参照してください。
- すべてのコード品質ルールの一覧については、「コード品質ルール」を参照してください。
追加のルールを有効にする
"分析モード" とは、事前に定義されたコード分析構成 (いずれのルールも有効になっていない、一部またはすべてのルールが有効になっている) を意味します。 既定の分析モード (Default) では、少数のルールのみがビルド警告として有効になっています。 プロジェクト ファイルで <AnalysisMode> プロパティを設定することにより、プロジェクトの分析モードを変更できます。 次の値を使用できます。
| 値 | 説明 | 
|---|---|
| None | すべてのルールが無効になっています。 個々の規則を選択的にオプトインして有効にすることができます。 | 
| Default | 既定のモードでは、特定のルールがビルド警告として有効になり、特定のルールが Visual Studio IDE の提案として有効になり、残りは無効になります。 | 
| Minimum | Defaultモードよりも積極的なモード。 ビルドの実施のために強く推奨される特定の提案が、ビルドの警告として有効になります。 これに含まれる規則を確認するには、%ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_minimum.globalconfig ファイルを調べます。 (.NET 7 以前のバージョンの場合、ファイル拡張子は .editorconfig | 
| Recommended | Minimumモードよりも積極的なモードであり、より多くの規則がビルド警告として有効になります。 これに含まれる規則を確認するには、%ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_recommended.globalconfig ファイルを調べます。 (.NET 7 以前のバージョンの場合、ファイル拡張子は .editorconfig | 
| All | すべての規則がビルド警告として有効になっています*。 個々のルールを選択的にオプトアウトして無効にすることができます。 * 次の規則は、 を AnalysisModeに設定するか、AllをAnalysisLevelに設定しても有効に "なりません": CA1017、CA1045、CA1005、CA1014、CA1060、CA1021、およびコード メトリック アナライザー規則 (CA1501、CA1502、CA1505、CA1506、CA1509)。latest-allこれらのレガシ規則は将来のバージョンで非推奨になる可能性があります。 ただし、dotnet_diagnostic.CAxxxx.severity = <severity>エントリを使って個別に有効にすることはできます。 | 
              <AnalysisMode> プロパティの複合値を優先して、<AnalysisLevel>を省略することもできます。 たとえば、次の値を使用すると、最新リリースに対して推奨される規則セットが有効になります: <AnalysisLevel>latest-Recommended</AnalysisLevel>。 詳細については、AnalysisLevelを参照してください。
使用可能な各ルールの既定の重要度と、Default 分析モードでルールが有効になっているかどうかを確認するには、ルールの完全な一覧 を参照してください。
の警告をエラーとして扱う
プロジェクトをビルドするときに -warnaserror フラグを使用すると、すべてのコード分析の警告もエラーとして扱われます。 
              -warnaserror の存在下でコード品質の警告 (CAxxxx) がエラーとして扱われないようにするには、プロジェクト ファイル内の CodeAnalysisTreatWarningsAsErrors MSBuild プロパティを false に設定します。
<PropertyGroup>
  <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
コード分析の警告は引き続き表示されますが、ビルドが中断することはありません。
最新の更新
既定では、新しいバージョンの .NET SDK にアップグレードするときに、最新のコード分析ルールと、ルールの既定の重要度を取得します。 この動作が望ましくない (たとえば、新しいルールが有効または無効にならないようにする) 場合は、次のいずれかの方法でオーバーライドできます。
- AnalysisLevelMSBuild プロパティを特定の値に設定して、警告をそのセットにロックします。 より新しい SDK にアップグレードすると、これらの警告のバグ修正が引き続き表示されますが、新しい警告は有効にならず、既存の警告は無効になりません。 たとえば、.NET SDK のバージョン 8.0 に付属する規則のセットをロックするには、次のエントリをプロジェクト ファイルに追加します。- <PropertyGroup> <AnalysisLevel>8.0</AnalysisLevel> </PropertyGroup>- ヒント - AnalysisLevelプロパティの既定値は- latestです。これは、より新しいバージョンの .NET SDK に移行するときに、常に最新のコード分析ルールを取得することを意味します。- 詳細情報、および使用可能な値の一覧については、「AnalysisLevel」を参照してください。 
- Microsoft.CodeAnalysis.NetAnalyzers NuGet パッケージをインストールして、.NET SDK の更新プログラムからルールの更新を分離します。 .NET 5 以降をターゲットとするプロジェクトでは、パッケージをインストールすると、組み込みの SDK アナライザーがオフになります。 NuGet パッケージよりも新しいバージョンのアナライザー アセンブリが SDK に含まれている場合は、ビルド警告が表示されます。 警告を無効にするには、 - _SkipUpgradeNetAnalyzersNuGetWarningプロパティを- trueに設定します。- Note - Microsoft.CodeAnalysis.NetAnalyzers NuGet パッケージをインストールする場合は、プロジェクト ファイルまたは Directory.Build.props ファイルに EnableNETAnalyzers プロパティを追加しないでください。 NuGet パッケージがインストールされ、 - EnableNETAnalyzersプロパティが- trueに設定されると、ビルド警告が生成されます。
コードスタイルの分析
"コードスタイルの分析" ("IDExxxx") ルールを使用すると、コードベースで一貫性のあるコードスタイルを定義および維持することができます。 既定の有効化設定は次のとおりです。
- コマンド ライン ビルド: コード スタイルの分析は、コマンド ライン ビルド上のすべての .NET プロジェクトに対して既定で非対応です。 - ビルド時コマンド ラインと Visual Studio 内の両方で、有効なコード スタイルの分析をできます。 コード スタイルに違反すると、"IDE" プレフィックスが付いた警告またはエラーが表示されます。 これにより、ビルド時に一貫したコード スタイルを適用できます。 
- Visual Studio: コード スタイルの分析は有効です既定では、Visual Studio 内のすべての .NET プロジェクトに対して、コードリファクタリングクイック アクションとして。 
コードスタイルの分析ルールの完全な一覧については、「コードスタイル ルール」を参照してください。
ビルド時に有効にする
コマンド ラインと Visual Studio からビルドするときに、コード スタイルの分析を有効にすることができます。 (ただし、パフォーマンス上の理由から、いくつかのコードスタイル ルールは Visual Studio IDE にのみ適用されます)。
ビルド時にコードスタイルの分析を有効にするには、次の手順に従います。
- MSBuild プロパティ EnforceCodeStyleInBuild を - trueに設定します。
- .editorconfig ファイルで、ビルド時に実行する各 "IDE" コード スタイル ルールを警告またはエラーとして構成します。 次に例を示します。 - [*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning- ヒント - .NET 9 以降では、オプションの書式を使用して重大度を指定し、ビルド時に遵守させることもできます。 次に例を示します。 - [*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_style_require_accessibility_modifiers = always:warning- また、既定では、カテゴリ全体を警告またはエラーとして構成してから、ビルド時に実行しないカテゴリのルールを選択的にオフにすることもできます。 次に例を示します。 - [*.{cs,vb}] # Default severity for analyzer diagnostics with category 'Style' (escalated to build warnings) dotnet_analyzer_diagnostic.category-Style.severity = warning # IDE0040: Accessibility modifiers required (disabled on build) dotnet_diagnostic.IDE0040.severity = silent
警告を抑制する
ルール違反を抑制する方法の 1 つとして、EditorConfig ファイルでそのルール ID の重要度オプションを none に設定します。 次に例を示します。
dotnet_diagnostic.CA1822.severity = none
詳細情報、および警告を非表示にするその他の方法については、「コード分析の警告を抑制する方法」を参照してください。
レガシ プロジェクトでコード分析を有効にする
プロジェクトが .NET 5 以降をターゲットとしている場合は、既定でコード分析が有効になっています。 プロジェクトが .NET Standard または .NET Framework を対象とする場合は、 EnableNETAnalyzers プロパティを true に設定して、コード分析を手動で有効にする必要があります。
プロジェクトでレガシ プロジェクト ファイル形式が使用されている場合、つまりプロジェクト SDK を参照していない場合は、コード分析を有効にするために実行する必要がある追加の手順がいくつかあります。
- 📦 Microsoft.CodeAnalysis.NetAnalyzers NuGet パッケージへの参照を追加します。
- SDK スタイル以外のプロジェクトでは認識されない AnalysisLevelを設定する代わりに、プロジェクト ファイルに次のプロパティを追加します。
  <EffectiveAnalysisLevel>9</EffectiveAnalysisLevel>
  <AnalysisMode>Recommended</AnalysisMode>
サード パーティのアナライザー
公式の .NET アナライザーに加えて、StyleCop、Roslynator、XUnit Analyzers、Sonar Analyzer などのサードパーティ製アナライザーをインストールすることもできます。
関連項目
- コード品質の分析ルールのリファレンス
- コード スタイルの分析ルールのリファレンス
- Visual Studio でのコード分析
- .NET コンパイラ プラットフォーム SDK の
- チュートリアル: 最初のアナライザーとコード修正を作成する
- ASP.NET Core アプリのコード分析
.NET