Roslynでツールバージョン認識エラーが出るときの対応

この記事は公開から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ライブラリが利用されるように以下の設定を行う。

  1. プロジェクトファイルの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に設定する。

  2. ソースコード内でMicrosoft.Build.Locatorを使用するように設定。

    if (MSBuildLocator.CanRegister)
    {
        MSBuildLocator.RegisterDefaults();
    }


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする