-
Notifications
You must be signed in to change notification settings - Fork 0
MS_MSBuildMSB4019
- 戻る(MSBuild)
構築の度に、ハマるのでメモ。
以下のようなエラーが出た場合の対処。
*.csproj(200,3): error MSB4019: インポートされたプロジェクト
"...\Program
Files\MSBuild\Microsoft\VisualStudio\v...\WebApplications\Microsoft.WebApplication.targets" が見つかりませんでした。
<Import> 宣言のパスが正しいかどうか、およびファイルがディスクに存在しているかどうかを確認してください。
補足(発生条件): このエラーは
**「Web アプリケーション プロジェクト」を、
Visual Studio が入っていない(または構成が異なる)環境で
MSBuild.exeからビルドした」**時に起きる。Web アプリケーション プロジェクトの .csproj には、 必ず次の Import が入っている <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" ... /> → この .targets は Visual Studio(または Build Tools の Web 開発ワークロード)に付属する → CI サーバーに入っていないと MSB4019開発機では通るのにビルド サーバーで落ちる、という
典型的な「環境差」問題である
(CS0246 や CS1519 と同系統)。
プロジェクト・ファイルから WebApplications を含む
Import セクションを削除したら、ビルドが正常に通るようになった。
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />※ 以下の手段を採択できない VS2017 以降で採用予定。
補足(削除しても通る理由と、その代償):
Microsoft.WebApplication.targetsは
コンパイル自体には不要で、主に
Web 固有の発行・パッケージング機能を提供している。
提供される機能 Import を消すと コンパイル( csc)影響なし( Microsoft.CSharp.targetsが担当)_CopyWebApplication(binへの配置)使えなくなる Package/MSDeploy(Web Deploy)使えなくなる TransformWebConfig(web.config変換)使えなくなる プリコンパイル(プリコンパイル) 使えなくなる つまり、**「DLL を作るだけなら通る」**が、
msbuild /t:Packageによる発行や
web.Release.configによる構成変換が動かなくなる。CI が「ビルドして成果物を zip する」だけなら削除で問題ないが、
Web Deploy でデプロイしている場合は削除できない。
原文が「VS2017 以降で採用予定」としているのは、
次節の方法が採れない場合のやむを得ない選択という位置づけである。
-
MSB4019 でググると、「WebApplications フォルダをコピー」という対応が発見できる。
-
確かに、
-
エラーが起きた環境には、
Visual Studio バージョンに対応する Microsoft.WebApplication.targets は存在せず、 -
エラーが起きない環境には、
Visual Studio バージョンに対応する Microsoft.WebApplication.targets は存在した。
-
-
「WebApplications フォルダをコピー」で対応
-
以下の WebApplications フォルダを、v15.0 以下にコピー
- C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications
- C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\
※ ただし、v14.0 フォルダが無い場合には採用不可。
補足(VS 2017 以降でパスが変わった): 原文が
「v14.0 フォルダが無い場合には採用不可」としている背景には、
MSBuild の配置場所の変更がある。【VS 2015 以前】マシン共通の場所 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\ 【VS 2017 以降】VS インストール先の配下(エディションごとに別) C:\Program Files\Microsoft Visual Studio\2022\Community\ MSBuild\Microsoft\VisualStudio\v17.0\WebApplications\ C:\Program Files\Microsoft Visual Studio\2022\BuildTools\ MSBuild\Microsoft\VisualStudio\v17.0\WebApplications\VS 2015 が入っていないクリーンな環境では、
コピー元となるv14.0が存在しないため、この手が使えない。なお、フォルダをコピーする対処は推奨されない
(ライセンス上の問題、バージョン不整合、更新時に壊れる)。
**次節の「必要なコンポーネントを正規にインストールする」**のが本筋である。
通常の「Visual Studio」のインストレーションで上記フォルダがインストールされるとか、
「Build Tools for Visual Studio」を個別にインストールすることで解決するなどの情報がある。
しかし、以下を色々と試してみたが、結論としては解決しなかった。
-
以下から、Visual Studio ブートストラップ(vs_buildtools.exe)を取得する。
https://aka.ms/vs/15/release/vs_buildtools.exe -
Visual Studio ブートストラップ(vs_buildtools.exe)を起動し
- Visual C++ Build Tools をチェックし、
- 更に、以下オプションをチェックして、
- C++/CLI サポート
- デスクトップ C++ 用 Windows 10 SDK
インストールを行う。
- 以下のような方法もあるらしいが、解決しなかった。
- 以下のコマンドで、Build Tools for Visual Studio をインストールする。
vs_buildtools.exe --add Microsoft.VisualStudio.Workload.MSBuildTools --quiet
補足(解決しなかった理由/正しいコンポーネント): 原文が
試している内容は、選んでいるワークロードが違うため解決しない。
試したもの 提供されるもの Visual C++ Build Tools C++ のビルド ツール(無関係) C++/CLI サポート 同上(無関係) Workload.MSBuildToolsMSBuild 本体のみ。Web の targets は含まない 必要なのは「Web 開発ビルド ツール」ワークロードである。
vs_buildtools.exe --quiet --wait --norestart ` --add Microsoft.VisualStudio.Workload.WebBuildTools ` --add Microsoft.VisualStudio.Workload.NetCoreBuildTools ` --add Microsoft.VisualStudio.Workload.MSBuildTools
ワークロード ID 内容 Microsoft.VisualStudio.Workload.WebBuildToolsWeb 開発ビルド ツール( Microsoft.WebApplication.targetsを含む)Microsoft.VisualStudio.Workload.NetCoreBuildTools.NET Core ビルド ツール Microsoft.VisualStudio.Workload.MSBuildToolsMSBuild の中核 Microsoft.VisualStudio.Workload.VCToolsC++(原文が選んだもの) 確認方法:
# インストール済みのワークロードを列挙 & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" ` -latest -products * -format json | ConvertFrom-Json | Select-Object installationPath, displayName # targets が実在するか確認 Get-ChildItem -Recurse -Filter Microsoft.WebApplication.targets ` "C:\Program Files\Microsoft Visual Studio" -ErrorAction SilentlyContinue
補足(現在の推奨:Web Deploy に依存しない): そもそも論として、
この問題は .NET Framework 版 ASP.NET 固有である。
ASP.NET (System.Web) ASP.NET Core Microsoft.WebApplication.targets必要 不要 発行 msbuild /t:Package(Web Deploy)dotnet publish出力 zip + パラメータ ファイル フォルダ一式(そのまま配置可能) ビルド環境 VS / Build Tools が必要 .NET SDK だけでよい # ASP.NET Core なら、SDK だけで発行まで完結する dotnet publish -c Release -o ./publishCI 環境の構築コストという観点でも、
ASP.NET Coreへの移行 の効果は大きい
(ビルド エージェントに Visual Studio を入れる必要が無くなる)。
コンテナ化(.NETアプリをコンテナにデプロイ)を
視野に入れる場合は、なおさらである。
- MSBuild をコマンドで呼ぶとエラーする。
MSB4019 Microsoft.WebApplication.targets が
見つかりませんでした | naichilab - Android iOSアプリ開発メモ
https://naichilab.blogspot.com/2015/03/msbuild-msb4019-microsoftwebapplication.html
-
Microsoft.WebApplication.targets references non-existent file after clean install - Developer Community
https://developercommunity.visualstudio.com/content/problem/56756/microsoftwebapplicationtargets-references-non-exis.html-
visual studio 2017 - How can I install the VS2017 version of msbuild on a build server without installing the IDE? - Stack Overflow
https://stackoverflow.com/questions/42696948- Visual Studio のネットワーク ベース インストールを作成する - Visual Studio
https://learn.microsoft.com/ja-jp/visualstudio/install/create-a-network-installation-of-visual-studio
- Visual Studio のネットワーク ベース インストールを作成する - Visual Studio
-
Windows 10 で Build Tools for Visual Studio 2017 のインストール
https://www.kunihikokaneko.com/dblab/toolchain/vc15buildtool.html
-
-
Visual StudioなしにWindows上でコンパイルする
https://www.infoq.com/jp/news/2016/12/vsbt
- c# - External VS2013 build error "error MSB4019: The imported project <path> was not found" - Stack Overflow
https://stackoverflow.com/questions/19718281/external-vs2013-build-error-error-msb4019-the-imported-project-path-was-not
- MSBuild エラー MSB4019
https://learn.microsoft.com/ja-jp/visualstudio/msbuild/errors/msb4019 - Visual Studio Build Tools のワークロードとコンポーネント ID
https://learn.microsoft.com/ja-jp/visualstudio/install/workload-component-id-vs-build-tools
Tags: 移行, テスト, デバッグ, デプロイ, .NET開発
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。