MS_NuGetMSB3086 - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
構築の度に、ハマるのでメモ。
-
以下のようなエラーが出た場合、
-
error MSB3086: タスクは SdkToolsPath "・・・" またはレジストリ キー "・・・" を使用して "AL.exe" を見つけられませんでした。
-
error MSB3086: Task could not find "AL.exe" using the SdkToolsPath "・・・" or the registry key "・・・".
-
-
MSBuild でのビルドに必要な SDK がインストールされていなくてエラーになっている。
補足(
AL.exeとは): アセンブリ リンカー(Assembly Linker)で、
主にサテライト アセンブリ(*.resources.dll)の生成に使われる。Strings.ja.resx → Strings.ja.resources → AL.exe → ja\Foo.resources.dllつまり、このエラーが出るのは
ローカライズ用のリソース ファイルを持つプロジェクトである
(NuGetパッケージの開発と公開 の
Localized Package も同じ仕組み)。
AL.exeは **.NET SDK ではなく Windows SDK(.NET Framework SDK)**に
含まれるため、
Visual Studio を入れても、SDK コンポーネントを選ばないと入らない。
これが「構築の度にハマる」原因である。
エラー・メッセージを読むと、
「MSBuild のタスクで SdkToolsPath を使用して "AL.exe" を発見できなかった旨」
が表示される。
エラーメッセージ中のレジストリキーの情報から SDK のバージョンを特定し、
- Nuget で入手したライブラリを使用するプロジェクトのビルド時に
MSB3086 のエラーが発生 – Visual Studio サポート チーム blog
https://blogs.msdn.microsoft.com/jpvsblog/2016/09/12/nuget-msb3086/- Microsoft SDKs\Windows\v10.0A
Windows 10 用の Windows SDK / .NET Framework 4.6.2 SDK - Microsoft SDKs\Windows\v8.1A
Windows 8.1 用の Windows SDK / .NET Framework 4.5.1 SDK - Microsoft SDKs\Windows\v8.0A
Windows 8 用の Windows SDK / .NET Framework 4.5 SDK - Microsoft SDKs\Windows\v7.1A
Windows 7 用の Windows SDK /.NET Framework 4.0 SDK - Microsoft SDKs\Windows\v7.0A
Windows 7 用の Windows SDK / .NET Framework 3.5 SDK
- Microsoft SDKs\Windows\v10.0A
該当する Windows SDK の [.NET Framework Software Development Kit] をインストールする。
「対象の NuGet パッケージが必要とする SDK ツールが開発環境に
インストールされていない場合に、このようなエラーが発生する。」とのこと。
※ MSBuild の問題ではない?
補足(原文の疑問への回答): MSBuild の問題ではない、という
原文の見立ては正しい。整理すると次の通り。① .resx を持つプロジェクトをビルドする ② MSBuild の GenerateSatelliteAssemblies ターゲットが動く ③ そのタスクが AL.exe を SdkToolsPath / レジストリから探す ④ Windows SDK が未インストール → 見つからない → MSB3086MSBuild は「探して呼ぶ」だけで、
AL.exeを提供しているのは Windows SDK 側である。ちなみに NuGet が直接の原因でもない。
NuGet パッケージ(ローカライズ リソースを含むもの)を入れたことで、
サテライト アセンブリの生成が必要になった、という間接的な関係である。
| # | Windows | .NET Framework |
|---|---|---|
| 1 | v7.0A Windows 7 用の Windows SDK | .NET Framework 3.5 SDK |
| 1 | https://www.microsoft.com/en-us/download/details.aspx?id=3138 | https://www.microsoft.com/en-us/download/details.aspx?id=3138 |
| 2 | v7.1A Windows 7 用の Windows SDK | .NET Framework 4.0 SDK |
| 2 | https://www.microsoft.com/en-us/download/details.aspx?id=8279 | https://www.microsoft.com/en-us/download/details.aspx?id=8279 |
| 3 | v8.0A Windows 8 用の Windows SDK | .NET Framework 4.5 SDK |
| 3 | https://go.microsoft.com/fwlink/p/?LinkId=226658 | https://go.microsoft.com/fwlink/p/?LinkId=226658 |
| 4 | v8.1A Windows 8.1 用の Windows SDK | .NET Framework 4.5.1 SDK |
| 4 | https://go.microsoft.com/fwlink/p/?LinkId=323507 | https://go.microsoft.com/fwlink/p/?LinkId=323507 |
| 5 | v10.0A Windows 10 用の Windows SDK | .NET Framework 4.6.2 SDK |
| 5 | https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk | https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk |
移行メモ(表の展開): 原文は PukiWiki のセル結合(
>/~)で
ダウンロード URL を 2 列にまたがらせていたが、
GitHub Markdown にセル結合が無いため、同じ値を展開して掲載した。
※ OS のバージョンは、開発機の OS バージョンを意味していないので注意。
補足(この注意書きが重要):
v8.1Aは
**「Windows 8.1 で使う SDK」ではなく「Windows 8.1 世代の SDK」**である。
どのバージョンが要るかは、
プロジェクトのターゲット フレームワーク
(ターゲット フレームワークのバージョン)
と、使っている Visual Studio の世代で決まる。例えば Windows 11 の開発機でも、
net461をターゲットにしていればv8.1A相当が要求されることがある。
https://github.com/OpenTouryoProject/OpenTouryoTemplates/issues/48#issuecomment-241349223
にあるように、
- .NET Framework x.x Software Development Kit
をインストールする。
補足(現在の入手方法/最新化): 原文が挙げる個別の
「Windows SDK」ダウンロード ページは、多くがリンク切れか
統合済みである。現在は Visual Studio Installer から入れるのが確実。Visual Studio Installer を起動 → 変更 → 個別のコンポーネント タブ → 「.NET」カテゴリ ・.NET Framework 4.x ターゲット パック ・.NET Framework 4.x SDK ← AL.exe はこちら → 「SDK、ライブラリ、およびフレームワーク」カテゴリ ・Windows 10 SDK / Windows 11 SDK「ターゲット パック」と「SDK」は別物である点に注意する。
内容 AL.exeターゲット パック 参照アセンブリ(コンパイル用) 含まれない SDK ツール群( AL.exe、sn.exe、ildasm.exe等)含まれる ビルド サーバーに Visual Studio 本体を入れたくない場合は、
Build Tools for Visual Studio で同じコンポーネントを選べる。vs_buildtools.exe --quiet --wait ` --add Microsoft.VisualStudio.Workload.MSBuildTools ` --add Microsoft.Net.Component.4.8.SDK ` --add Microsoft.Net.Component.4.8.TargetingPackなお、.NET Core / .NET(SDK スタイル)では発生しない。
サテライト アセンブリの生成にAL.exeを使わず、
Roslyn(csc)が直接生成するようになったためである。
.NET Coreへの移行 を済ませれば、
このエラーとは無縁になる。
-
Running MSBuild fails to read SDKToolsPath
Issue #48 · OpenTouryoProject/OpenTouryoTemplates
https://github.com/OpenTouryoProject/OpenTouryoTemplates/issues/48 -
Task could not find "AL.exe" でエラーが出た時の対応 - dunno logs
http://d.hatena.ne.jp/dany1468/20120403/1333412152 -
Support Team Blog
- Nuget で入手したライブラリを使用するプロジェクトのビルド時にMSB3086 のエラーが発生 - Visual Studio
https://blogs.msdn.microsoft.com/jpvsblog/2016/09/12/nuget-msb3086/ - 入手可能な Windows SDK について - JAPAN Platform SDK(Windows SDK)
https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2011/04/21/windows-sdk/ - 入手可能な Windows SDK について Winows 8 / 8.1 / 10 向け
https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2016/10/03/
- Nuget で入手したライブラリを使用するプロジェクトのビルド時にMSB3086 のエラーが発生 - Visual Studio
- Al.exe (アセンブリ リンカー)
https://learn.microsoft.com/ja-jp/dotnet/framework/tools/al-exe-assembly-linker - Visual Studio Build Tools のワークロードとコンポーネント ID
https://learn.microsoft.com/ja-jp/visualstudio/install/workload-component-id-vs-build-tools
Tags: 移行, .NET開発, デプロイ, デバッグ, NuGet