レガシ FxCop および .NET アナライザーに関してよく寄せられる質問

レガシ FxCop (バイナリ分析) と .NET アナライザー (ソース分析) の違いは、少し理解しにくい場合があります。 この記事は、ユーザーの方々がお持ちの質問を解決することを意図しています。

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

従来の FxCop は、コンパイル済みのアセンブリ上でビルド後の分析を実行します。 これは、FxCopCmd.exe という別の実行可能ファイルとして実行されます。 FxCopCmd.exe はコンパイル済みのアセンブリを読み込み、コード分析を実行し、結果 (または診断) を報告します。

.NET アナライザーは .NET Compiler Platform ("Roslyn") に基づいています。 これは、.NET SDK から有効にするか、NuGet パッケージとしてインストールします。このパッケージは、プロジェクトまたはソリューションによって参照されます。 アナライザーは、コンパイラーの実行中にソース コードに基づく分析を実行します。 アナライザーは、csc.exe または vbc.exe のコンパイラーのプロセス内にホストされ、プロジェクトの構築時に分析を実行します。 アナライザーの結果は、コンパイラーの結果と共に報告されます。

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

FxCop アナライザーと .NET アナライザーはどちらも、FxCop CA 規則の .NET Compiler Platform ("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 アナライザーへの移行を検討してください。

.NET アナライザーは、[コード分析の実行] コマンドで実行されるのですか?

Visual Studio 2019 16.5 リリースより前のバージョンでは、[分析]>[コード分析の実行] を選択すると、レガシ分析が実行されます。 Visual Studio 2019 16.5 以降では、[コード分析の実行] メニュー オプションを使用すると、選択したプロジェクトまたはソリューションに対して Roslyn ベースのアナライザーが実行されます。 .NET アナライザーがインストールされている場合は、それらも実行されます。 詳細については、マネージド コードに手動でコード分析を実行する方法に関するページを参照してください。

RunCodeAnalysis msbuild プロジェクト プロパティはアナライザーを実行しますか?

いいえ。 (たとえば .csproj の) プロジェクト ファイル内の RunCodeAnalysis プロパティは、従来の FxCop を実行するためのみに使用します。 これは、FxCopCmd.exe を起動するビルド後の msbuild タスクを実行します。

では、.NET アナライザーはどのように実行するのですか?

.NET アナライザーを実行するには、最初に .NET SDK から有効にするか、NuGet パッケージとしてインストールします。 次いでプロジェクトまたはソリューションを Visual Studio または msbuild を使用してビルドします。 Roslyn アナライザーが生成する警告やエラーは、[エラー一覧] またはコマンド ウィンドウに表示されます。

.NET アナライザーの NuGet パッケージをインストールした後でも警告 CA0507 が表示される

.NET アナライザーをインストールしても、""コード分析の実行" は廃止され、ビルド時には FxCop アナライザーが実行されます" という警告 CA0507 が引き続き表示される場合は、状況に応じて、プロジェクト ファイル内の RunCodeAnalysis msbuild プロパティを false に設定することが必要である可能性があります。 それ以外の場合、レガシ分析は、各ビルドの後に実行されます。

<RunCodeAnalysis>false</RunCodeAnalysis>

.NET アナライザーには、どの規則が移植されていますか?

.NET アナライザーに移植されたレガシ分析規則の詳細については、「Fxcop 規則の移植ステータス」を参照してください。

コード分析の警告がエラーとして扱われる

プロジェクトでビルド オプションが使用されて警告がエラーとして扱われる場合は、アナライザーの警告がエラーとして表示されることがあります。 コード分析の警告がエラーとして扱われないようにするには、「コード分析に関する FAQ」にある手順を実行します。

関連項目