🔧

Visual Studio 2022 17.4 以降で Microsoft.CodeAnalysis.Analyzers の警告が出る

2022/11/14に公開

症状

Visual Studio 2022 17.4 以降でプロジェクトを開いた際にエラーリストに警告 CS8032 が表示される場合があります。これはビルド時に Warning などとしては出力されず、Visual Studio の IDE 上にのみ表示されます。

An instance of analyzer Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpDiagnosticAnalyzerFieldsAnalyzer cannot be created from C:\Users\UserName.nuget\packages\microsoft.codeanalysis.analyzers\3.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll: Could not load type 'Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers.DiagnosticAnalyzerFieldsAnalyzer`4' from assembly 'Microsoft.CodeAnalysis.Analyzers, Version=3.3.3.10305, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

An instance of analyzer Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpReportDiagnosticAnalyzer cannot be created from C:\Users\UserName.nuget\packages\microsoft.codeanalysis.analyzers\3.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll: Could not load type 'Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers.ReportDiagnosticAnalyzer`4' from assembly 'Microsoft.CodeAnalysis.Analyzers, Version=3.3.3.10305, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

日本語環境

An instance of analyzer Microsoft.CodeAnalysis.CSharp.Analyzers.MetaAnalyzers.CSharpReportDiagnosticAnalyzer cannot be created from C:\Users\UserName.nuget\packages\microsoft.codeanalysis.analyzers\3.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll: アセンブリ 'Microsoft.CodeAnalysis.Analyzers, Version=3.3.3.10305, Culture=neutral, PublicKeyToken=31bf3856ad364e35' から型 'Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers.ReportDiagnosticAnalyzer`4' を読み込めませんでした。

原因

使用しているライブラリーが依存している Microsoft.CodeAnalysis.Analyzers が古く、Visual Studio と互換性がないことで警告を表示します。

BenchmarkDotNet 0.13.2 は Microsoft.CodeAnalysis.CSharp 3.0.0 以降に依存しています。
このパッケージを追加すると下限の 3.0.0 が追加され、その先の依存として Microsoft.CodeAnalysis.Analyzers 2.6.2-beta2 が追加されます。その際 Visual Studio 2022 17.4 と互換性がなく警告が表示されます。

解決方法

次のいずれかのパッケージをプロジェクトに追加します。

  • Microsoft.CodeAnalysis.Analyzers 3.3.2 以降
  • Microsoft.CodeAnalysis.Common 3.10.0 以降 (Analyzers 3.3.2 に依存)
  • Microsoft.CodeAnalysis.CSharp 3.10.0 以降 (Common 3.10.0 に依存)

Central Package Management を使う方法

Central Package Management というパッケージバージョンを一元管理する仕組みを使った場合、推移的パッケージ (Transitive Package; 依存の依存で入るパッケージ) のバージョンも固定することができます。

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
   </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" />
    <PackageVersion Include="BenchmarkDotNet" Version="0.13.2" />
  </ItemGroup>
</Project>

Discussion