この記事は公開から1年以上経過しています。
.NET Framework 4.8でRoslynを使い静的ソースコード解析を行うプログラムを作成していたところ、Releaseビルド時のみ
The tools version "Current" is unrecognized. Available tools versions are "15.0", "2.0", "3.5", "4.0".
のようなエラーが発生する現象に遭遇したため、その解決方法についての備忘録。
原因
ランタイム環境で適切なMSBuildライブラリが利用されていない。
対応
ランタイム時に適切なMSBuildライブラリが利用されるように以下の設定を行う。
-
プロジェクトファイルのPackageReference設定で、
Microsoft.Build.Locator
以外のMicrosoft.Build.*
を出力ディレクトリへ出力しないように設定。<ItemGroup> <PackageReference Include="Microsoft.Build" Version="15.1.548" ExcludeAssets="runtime" /> <PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.1.548" ExcludeAssets="runtime" /> </ItemGroup>
※PackageReferenceではなくpackages.configの場合は、マイグレーションを行うかプロジェクトツリーの
参照
から上記ライブラリプロパティのローカルにコピー
をfalse
に設定する。 -
ソースコード内で
Microsoft.Build.Locator
を使用するように設定。if (MSBuildLocator.CanRegister) { MSBuildLocator.RegisterDefaults(); }
参考ウェブサイトなど
- Microsoft Learn
MSBuild のバージョンの検索と使用
以上です。