次の方法で共有


Visual Studio でのコード分析に関する FAQ

このページには、Visual Studio での .NET コンパイラ プラットフォームベースのコード分析に関してよく寄せられる質問に対する回答が含まれています。

コード分析と EditorConfig

コードのスタイルを確認するには、コード分析または EditorConfig を使用する必要がありますか?

コード分析ファイルと EditorConfig ファイルは、連携して動作します。 EditorConfig ファイルまたはテキスト エディターの [オプション] ページでコード スタイルを定義する場合は、Visual Studio に組み込まれているコード アナライザーを実際に構成しています。 EditorConfig ファイルを使用して、アナライザー ルールを有効または無効にしたり、NuGet アナライザー パッケージを構成したりできます。

EditorConfig とルール セット

ルール セットまたは EditorConfig ファイルを使用してアナライザーを構成する必要がありますか?

ルール セットと EditorConfig ファイルは共存でき、両方を使用してアナライザーを構成できます。 EditorConfig ファイルとルール セットの両方で、ルールを有効または無効にし、その重大度を設定できます。

ただし、Visual Studio 2019 バージョン 16.5 以降では、ルール セット ファイルは EditorConfig ファイルを優先して非推奨となり、.NET Core および .NET 5 以降のプロジェクトでは、すべてのルール セット メニュー コマンドがサポートされているわけではありません。 詳細については、「 既存のルール セット ファイルを EditorConfig ファイルに変換する」を参照してください。

EditorConfig ファイルには、規則を構成する追加の方法が用意されています。

ルール セットと EditorConfig ファイルに加えて、一部のアナライザーは、C# および VB コンパイラ用の 追加ファイル としてマークされたテキスト ファイルを使用して構成されます。

  • EditorConfig ファイルは、Visual Studio 2019 バージョン 16.3 以降でルールを有効にし、その重大度を設定する場合にのみ使用できます。
  • EditorConfig ファイルを使用してレガシ分析を構成することはできませんが、ルール セットでは構成できます。

継続的インテグレーション (CI) ビルドでのコード分析

.NET コンパイラ プラットフォーム ベースのコード分析は、継続的インテグレーション (CI) ビルドで機能しますか?

Yes. .NET SDK 5.0 以降でインストールされているアナライザー、または NuGet パッケージからインストールされたアナライザーの場合、これらの規則は CI ビルド中を含め、 ビルド時に適用されます。 CI で使用されるアナライザーは、ルール セットと EditorConfig ファイルの両方からルールの構成を考慮して構築されます。 .NET 5.0 以降では、Visual Studio に組み込まれているコード スタイル アナライザーも .NET SDK に含まれており、そのほとんどは CI ビルドで適用できます。 詳細については、「 ビルド時に有効にする」を参照してください。

IDE アナライザーと StyleCop

Visual Studio IDE コード アナライザーと StyleCop アナライザーの違いは何ですか?

Visual Studio IDE には、コード スタイルと品質の両方の問題を検索する組み込みのアナライザーが含まれています。 これらのルールは、新しい言語機能の導入時に使用し、コードの保守容易性を向上させるために役立ちます。 IDE アナライザーは、Visual Studio リリースごとに継続的に更新されます。

StyleCop アナライザー は、コード内のスタイルの一貫性をチェックする NuGet パッケージとしてインストールされたサードパーティ製アナライザーです。 一般に、StyleCop ルールを使用すると、別のスタイルよりも 1 つのスタイルを推奨することなく、コード ベースの個人設定を設定できます。

コード アナライザーとレガシ分析

レガシ分析と .NET コンパイラ プラットフォーム ベースのコード分析の違いは何ですか?

.NET コンパイラ プラットフォームベースのコード分析では、ソース コードがリアルタイムでコンパイル中に分析されますが、レガシ分析ではビルドが完了した後にバイナリ ファイルが分析されます。 詳細については、「 .NET コンパイラ プラットフォームベースの分析とレガシ分析」を参照してください。

FxCop アナライザーと .NET アナライザー

FxCop アナライザーと .NET アナライザーの違いは何ですか?

FxCop アナライザーと .NET アナライザーはどちらも、FxCop CA ルールの .NET コンパイラ プラットフォーム ("Roslyn") アナライザーの実装を指します。 Visual Studio 2019 16.8 および .NET 5.0 より前では、これらのアナライザーは Microsoft.CodeAnalysis.FxCopAnalyzersNuGet パッケージとして出荷されました。 Visual Studio 2019 16.8 および .NET 5.0 以降では、これらのアナライザーは .NET SDK に含まれています。 これらは、Microsoft.CodeAnalysis.NetAnalyzersNuGet パッケージとしても使用できます。 FxCop アナライザーから .NET アナライザーへの移行を検討してください。

警告をエラーとして扱う

プロジェクトでは、ビルド オプションを使用して警告をエラーとして扱います。 レガシ分析からソース コード分析に移行した後、すべてのコード分析の警告がエラーとして表示されるようになりました。 どのように私は防ぐことができますか?

コード分析の警告がエラーとして扱われないようにするには、次の手順に従います。

  1. 次の内容の .props ファイルを作成します。

    <Project>
       <PropertyGroup>
          <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
       </PropertyGroup>
    </Project>
    
  2. .csproj または .vbproj プロジェクト ファイルに行を追加して、前の手順で作成した .props ファイルをインポートします。 この行は、アナライザーの .props ファイルをインポートする行の前に配置する必要があります。 たとえば、.props ファイルの名前が codeanalysis.props の場合は、次のようになります。

    ...
    <Import Project="..\..\codeanalysis.props" Condition="Exists('..\..\codeanalysis.props')" />
    <Import Project="..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props')" />
    ...
    

コード分析ソリューションのプロパティ ページ

ソリューションの [コード分析] プロパティ ページはどこにありますか?

ソリューション レベルのコード分析プロパティ ページが削除され、信頼性の高い共有プロパティ グループが優先されました。 プロジェクト レベルでコード分析を管理する場合、[コード分析] プロパティ ページは引き続き使用できます。 (マネージド プロジェクトの場合は、ルール構成のためにルール セットから EditorConfig に移行することもお勧めします)。ソリューションまたはリポジトリ内の複数またはすべてのプロジェクト間でルールセットを共有する場合は、共有 props/targets ファイルまたは Directory.props/Directory.targets ファイルで CodeAnalysisRuleSet プロパティを使用してプロパティ グループを定義することをお勧めします。 すべてのプロジェクトがインポートするような共通のプロパティまたはターゲットがない場合は、そのようなプロパティ グループを、ディレクトリまたはそのサブディレクトリで定義されているすべてのプロジェクト ファイルに自動的にインポートされる、最上位のソリューション ディレクトリの Directory.props または Directory.targets ファイル に追加することを検討する必要があります。