Visual Studio 2022 17.4 以降で Microsoft.CodeAnalysis.Analyzers の警告が出る
症状
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