.NET ソース コード分析の概要Overview of .NET source code analysis

.NET のコンパイラ プラットフォーム (Roslyn) アナライザーでは、お使いの C# または Visual Basic コードについて、コード品質やコード スタイルに関する問題を検査できます。.NET compiler platform (Roslyn) analyzers inspect your C# or Visual Basic code for code quality and code style issues. .NET 5.0 以降、これらのアナライザーは .NET SDK に含まれており、個別にインストールする必要はありません。Starting in .NET 5.0, these analyzers are included with the .NET SDK and you don't need to install them separately. プロジェクトが .NET 5 以降を対象としている場合は、既定でコード分析が有効になります。If your project targets .NET 5 or later, code analysis is enabled by default. プロジェクトが .NET Core、.NET Standard、.NET Framework などの別の .NET 実装をターゲットにしている場合は、 Enablenetanalyzers プロパティをに設定することによって、手動でコード分析を有効にする必要があり true ます。If your project target a different .NET implementation, for example, .NET Core, .NET Standard, or .NET Framework, you must manually enable code analysis by setting the EnableNETAnalyzers property to true.

.NET 5 + SDK に移行しない場合、または NuGet パッケージベースのモデルを使用する場合は、 Microsoft の CodeAnalysis. Netanalyzers nuget パッケージでアナライザーを使用することもできます。If you don't want to move to the .NET 5+ SDK or if you prefer a NuGet package-based model, the analyzers are also available in the Microsoft.CodeAnalysis.NetAnalyzers NuGet package. オンデマンドバージョン更新には、パッケージベースのモデルを使用することをお勧めします。You might prefer a package-based model for on-demand version updates.

注意

.NET アナライザーは、ターゲットフレームワークに依存しません。.NET analyzers are target-framework agnostic. つまり、プロジェクトは特定の .NET 実装をターゲットにする必要がありません。That is, your project does not need to target a specific .NET implementation. アナライザーは、やなど、以前のバージョンの .NET を対象とするプロジェクトでも機能し net5.0 netcoreapp3.1 net472 ます。The analyzers work for projects that target net5.0 as well as earlier .NET versions, such as netcoreapp3.1 and net472.

ルール違反が analyzer によって検出されると、各ルールの 構成方法に応じて、候補、警告、またはエラーとして報告されます。If rule violations are found by an analyzer, they're reported as a suggestion, warning, or error, depending on how each rule is configured. コード分析違反は、コンパイラエラーと区別するために "CA" または "IDE" というプレフィックスで示されます。Code analysis violations appear with the prefix "CA" or "IDE" to differentiate them from compiler errors.

コード品質の分析Code quality analysis

コード品質分析 ("caxxxx") ルールは、セキュリティ、パフォーマンス、設計などの問題について、C# または Visual Basic コードを検査します。Code quality analysis ("CAxxxx") rules inspect your C# or Visual Basic code for security, performance, design and other issues. .NET 5.0 以降を対象とするプロジェクトでは、既定で分析が有効になっています。Analysis is enabled, by default, for projects that target .NET 5.0 or later. 以前のバージョンの .NET を対象とするプロジェクトでは、 Enablenetanalyzers プロパティをに設定することにより、コード分析を有効にすることができ true ます。You can enable code analysis on projects that target earlier .NET versions by setting the EnableNETAnalyzers property to true. をに設定することにより、プロジェクトのコード分析を無効にすることもでき EnableNETAnalyzers false ます。You can also disable code analysis for your project by setting EnableNETAnalyzers to false.

ヒント

Visual Studio を使用している場合:If you're using Visual Studio:

  • 多くのアナライザールールには、問題を修正するために適用できる コード修正プログラム が関連付けられています。Many analyzer rules have associated code fixes that you can apply to correct the problem. コード修正は、電球アイコンメニューに表示されます。Code fixes are shown in the light bulb icon menu.
  • コード分析を有効または無効にするには、ソリューションエクスプローラーでプロジェクトを右クリックし、[プロパティ > ] [コード分析] タブ > [ .net アナライザーの有効化] の順に選択します。You can enable or disable code analysis by right-clicking on a project in Solution Explorer and selecting Properties > Code Analysis tab > Enable .NET analyzers.

有効なルールEnabled rules

次の規則は、既定では .NET 5.0 で有効になっています。The following rules are enabled, by default, in .NET 5.0.

診断 IDDiagnostic ID カテゴリCategory 重大度Severity 説明Description
CA1416CA1416 相互運用性Interoperability 警告Warning プラットフォーム互換性アナライザーPlatform compatibility analyzer
CA1417CA1417 相互運用性Interoperability 警告Warning OutAttributeP/invoke に文字列パラメーターを使用しないDo not use OutAttribute on string parameters for P/Invokes
CA1831CA1831 パフォーマンスPerformance 警告Warning AsSpan必要に応じて、範囲ベースのインデクサーの代わりに文字列を使用します。Use AsSpan instead of range-based indexers for string when appropriate
CA2013CA2013 [信頼性]Reliability 警告Warning ReferenceEquals値型では使用しないDo not use ReferenceEquals with value types
CA2014CA2014 [信頼性]Reliability 警告Warning In ループを使用しない stackallocDo not use stackalloc in loops
CA2015CA2015 [信頼性]Reliability 警告Warning から派生した型にはファイナライザーを定義しないでください。 MemoryManager<T>Do not define finalizers for types derived from MemoryManager<T>
CA2200CA2200 使用法Usage 警告Warning スタック詳細を保持するために再度スローしますRethrow to preserve stack details
CA2247CA2247 使用法Usage 警告Warning Taskのソースコンストラクターに渡される引数は、ではなく列挙型にする必要があり TaskCreationOptions ます TaskContinuationOptionsArgument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions

これらのルールを無効にするか、エラーに昇格するように、これらのルールの重大度を変更することができます。You can change the severity of these rules to disable them or elevate them to errors. さらに多くのルールを有効にすることもできます。You can also enable more rules.

  • 各 .NET SDK バージョンに含まれる規則の一覧については、「 Analyzer のリリース」を参照してください。For a list of rules that are included with each .NET SDK version, see Analyzer releases.
  • すべてのコード品質ルールの一覧については、「 コード品質ルール」を参照してください。For a list of all the code quality rules, see Code quality rules.

追加のルールを有効にするEnable additional rules

分析モード とは、定義されていないコード分析構成を意味します。この構成では、すべての規則が有効になっていません。Analysis mode refers to a predefined code analysis configuration where none, some, or all rules are enabled. 既定の分析モードでは、いくつかのルールのみが ビルド警告として有効になります。In the default analysis mode, only a small number of rules are enabled as build warnings. プロジェクトファイルの AnalysisMode プロパティを設定することにより、プロジェクトの分析モードを変更できます。You can change the analysis mode for your project by setting the AnalysisMode property in the project file. 使用できる値は次のとおりです。The allowable values are:

[値]Value 説明Description
AllDisabledByDefault これは最も控えめなモードです。This is the most conservative mode. 既定では、すべてのルールが無効になっています。All rules are disabled by default. 個々のルールを選択的にオプトインして有効にすることができます。You can selectively opt into individual rules to enable them.

<AnalysisMode>AllDisabledByDefault</AnalysisMode>
AllEnabledByDefault これは最も積極的なモードです。This is the most aggressive mode. すべてのルールがビルド警告として有効になります。All rules are enabled as build warnings. 個別 ルールを選択して無効にすることができます。You can selectively opt out of individual rules to disable them.

<AnalysisMode>AllEnabledByDefault</AnalysisMode>
Default 既定のモードでは、いくつかのルールが警告として有効になっています。その他のルールは、対応するコード修正によって Visual Studio IDE 候補としてのみ有効になり、残りは完全に無効になります。The default mode, where a handful of rules are enabled as warnings, others are enabled only as Visual Studio IDE suggestions with corresponding code fixes, and the rest are disabled completely. 個々 ルールを選択して無効にすることができます。You can selectively opt into or out of individual rules to disable them.

<AnalysisMode>Default</AnalysisMode>

使用可能な各ルールの既定の重要度と、ルールが既定の分析モードで有効になっているかどうかを確認するには、 ルールの完全な一覧を参照してください。To find the default severity for each available rule and whether or not the rule is enabled in the default analysis mode, see the full list of rules.

警告をエラーとして扱うTreat warnings as errors

-warnaserrorプロジェクトをビルドするときにフラグを使用すると、コード分析のすべての警告もエラーとして扱われます。If you use the -warnaserror flag when you build your projects, all code analysis warnings are also treated as errors. コード品質警告 (CAxxxx) がの存在でエラーとして扱われないようにするには -warnaserrorCodeAnalysisTreatWarningsAsErrors プロジェクトファイルで MSBuild プロパティをに設定し false ます。If you do not want code quality warnings (CAxxxx) to be treated as errors in presence of -warnaserror, you can set the CodeAnalysisTreatWarningsAsErrors MSBuild property to false in your project file.

<PropertyGroup>
  <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

コード分析の警告は引き続き表示されますが、ビルドが破損することはありません。You'll still see any code analysis warnings, but they won't break your build.

最新の更新プログラムLatest updates

既定では、新しいバージョンの .NET SDK にアップグレードするときに、最新のコード分析規則と既定の規則の重大度を取得します。By default, you'll get the latest code analysis rules and default rule severities as you upgrade to newer versions of the .NET SDK. この動作が望ましくない場合、たとえば、新しいルールが有効になっていないか無効になっていることを確認する場合は、次のいずれかの方法でオーバーライドできます。If you don't want this behavior, for example, if you want to ensure that no new rules are enabled or disabled, you can override it in one of the following ways:

  • AnalysisLevelMSBuild プロパティを特定の値に設定して、そのセットに警告をロックします。Set the AnalysisLevel MSBuild property to a specific value to lock the warnings to that set. 新しい SDK にアップグレードすると、これらの警告のバグ修正が引き続き行われますが、新しい警告は有効になりません。また、既存の警告は無効になりません。When you upgrade to a newer SDK, you'll still get bug fixes for those warnings, but no new warnings will be enabled and no existing warnings will be disabled. たとえば、.NET SDK のバージョン5.0 に付属するルールのセットをロックするには、プロジェクトファイルに次のエントリを追加します。For example, to lock the set of rules to those that ship with version 5.0 of the .NET SDK, add the following entry to your project file.

    <PropertyGroup>
      <AnalysisLevel>5.0</AnalysisLevel>
    </PropertyGroup>
    

    ヒント

    プロパティの既定値 AnalysisLevel はです latest 。これは、.net SDK の新しいバージョンに移行するときに、常に最新のコード分析規則を取得することを意味します。The default value for the AnalysisLevel property is latest, which means you always get the latest code analysis rules as you move to newer versions of the .NET SDK.

    詳細については、および使用可能な値の一覧については、「 AnalysisLevel」を参照してください。For more information, and to see a list of possible values, see AnalysisLevel.

  • .NET SDK の更新プログラムから規則の更新を分離するには、 Microsoft Codeanalysis NuGet パッケージ をインストールします。Install the Microsoft.CodeAnalysis.NetAnalyzers NuGet package to decouple rule updates from .NET SDK updates. パッケージをインストールすると、組み込みの SDK アナライザーが無効になり、SDK に NuGet パッケージよりも新しいバージョンの analyzer アセンブリが含まれている場合は、ビルドの警告が生成されます。Installing the package turns off the built-in SDK analyzers and generates a build warning if the SDK contains a newer analyzer assembly version than that of the NuGet package.

コードスタイルの分析Code-style analysis

コードスタイルの分析 ("ide xxxx") 規則を使用すると、コードベースで一貫性のあるコードスタイルを定義および維持できます。Code-style analysis ("IDExxxx") rules enable you to define and maintain consistent code style in your codebase. 既定の有効化設定は次のとおりです。The default enablement settings are:

  • コマンドラインビルド: コマンドラインビルドのすべての .NET プロジェクトに対して、コードスタイルの分析が既定で無効になっています。Command-line build: Code-style analysis is disabled, by default, for all .NET projects on command-line builds.

    .NET 5.0 以降では、コマンドラインと Visual Studio の両方で ビルドに対してコードスタイルの分析を有効にすることができます。Starting in .NET 5.0, you can enable code-style analysis on build, both at the command line and inside Visual Studio. コードスタイル違反は、"IDE" プレフィックスが付いた警告またはエラーとして表示されます。Code style violations appear as warnings or errors with an "IDE" prefix. これにより、ビルド時に一貫したコードスタイルを適用できます。This enables you to enforce consistent code styles at build time.

  • Visual Studio: コードスタイルの分析は、Visual Studio 内のすべての .NET プロジェクトに対して、 コードリファクタリングのクイックアクションとして既定で有効になっています。Visual Studio: Code-style analysis is enabled, by default, for all .NET projects inside Visual Studio as code refactoring quick actions.

コードスタイルの分析規則の完全な一覧については、「 コードスタイル規則」を参照してください。For a full list of code-style analysis rules, see Code style rules.

ビルドで有効にするEnable on build

.NET 5.0 SDK 以降のバージョンでは、コマンドラインや Visual Studio からビルドするときに、コードスタイルの分析を有効にすることができます。With the .NET 5.0 SDK and later versions, you can enable code-style analysis when building from the command-line and in Visual Studio. (ただし、パフォーマンス上の理由から、 いくつかのコードスタイルルール は、VISUAL Studio IDE にのみ適用されます)。(However, for performance reasons, a handful of code-style rules will still apply only in the Visual Studio IDE.)

ビルドでコードスタイルの分析を有効にするには、次の手順に従います。Follow these steps to enable code-style analysis on build:

  1. MSBuild プロパティ EnforceCodeStyleInBuild をに設定し true ます。Set the MSBuild property EnforceCodeStyleInBuild to true.

  2. Editorconfig ファイルで、ビルド時に実行する各 "IDE" コードスタイルルールを警告またはエラーとして 構成します。In an .editorconfig file, configure each "IDE" code style rule that you wish to run on build as a warning or an error. 例:For example:

    [*.{cs,vb}]
    # IDE0040: Accessibility modifiers required (escalated to a build warning)
    dotnet_diagnostic.IDE0040.severity = warning
    

    または、[スタイル] カテゴリ全体を警告またはエラーとして構成し、既定では、ビルドで実行しない規則を選択的にオフにすることができます。Alternatively, you can configure the entire "Style" category to be a warning or error, by default, and then selectively turn off rules that you don't want to run on build. 例:For example:

    [*.{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
    

注意

コードスタイルの分析機能は試験段階であり、.NET 5 リリースと .NET 6 リリース間で変更される可能性があります。The code-style analysis feature is experimental and may change between the .NET 5 and .NET 6 releases.

警告の非表示Suppress a warning

規則違反を抑制するには、その規則 ID の重大度オプションを none EditorConfig ファイルでに設定します。To suppress a rule violation, set the severity option for that rule ID to none in an EditorConfig file. 例:For example:

dotnet_diagnostic.CA1822.severity = none

Visual Studio には、コード分析規則からの警告を抑制するための追加の方法が用意されています。Visual Studio provides additional ways to suppress warnings from code analysis rules. 詳細については、「 違反の抑制」を参照してください。For more information, see Suppress violations.

規則の重大度の詳細については、「 規則の重要度の構成」を参照してください。For more information about rule severities, see Configure rule severity.

サード パーティのアナライザーThird-party analyzers

公式の .NET アナライザーに加えて、 StyleCopRosl/atorXunit Analyzer、sonar Analyzerなどのサードパーティ製アナライザーをインストールすることもできます。In addition to the official .NET analyzers, you can also install third party analyzers, such as StyleCop, Roslynator, XUnit Analyzers, and Sonar Analyzer.

関連項目See also