Skip to content

MS_MSBuildMSB4019

nishi_74322014 edited this page Sep 1, 2026 · 1 revision

ビルド時に「error MSB4019 ... MSBuild\...\Microsoft.WebApplication.targets was not found...」が発生

概要

構築の度に、ハマるのでメモ。

以下のようなエラーが出た場合の対処。

*.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

開発機では通るのにビルド サーバーで落ちる、という
典型的な「環境差」問題である
CS0246CS1519 と同系統)。

詳細

プロジェクト・ファイルから Import セクションを削除

プロジェクト・ファイルから 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 が担当)
_CopyWebApplicationbin への配置) 使えなくなる
Package / MSDeploy(Web Deploy) 使えなくなる
TransformWebConfigweb.config 変換) 使えなくなる
プリコンパイル(プリコンパイル 使えなくなる

つまり、**「DLL を作るだけなら通る」**が、
msbuild /t:Package による発行
web.Release.config による構成変換が動かなくなる。

CI が「ビルドして成果物を zip する」だけなら削除で問題ないが、
Web Deploy でデプロイしている場合は削除できない。
原文が「VS2017 以降で採用予定」としているのは、
次節の方法が採れない場合のやむを得ない選択という位置づけである。

WebApplications フォルダをコピー

概要

  • 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 が存在しないため、この手が使えない。

なお、フォルダをコピーする対処は推奨されない
(ライセンス上の問題、バージョン不整合、更新時に壊れる)。
**次節の「必要なコンポーネントを正規にインストールする」**のが本筋である。

Build Tools for Visual Studio を個別にインストール

概要

通常の「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.MSBuildTools MSBuild 本体のみ。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.WebBuildTools Web 開発ビルド ツールMicrosoft.WebApplication.targets を含む)
Microsoft.VisualStudio.Workload.NetCoreBuildTools .NET Core ビルド ツール
Microsoft.VisualStudio.Workload.MSBuildTools MSBuild の中核
Microsoft.VisualStudio.Workload.VCTools C++(原文が選んだもの)

確認方法:

# インストール済みのワークロードを列挙
& "${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 ./publish

CI 環境の構築コストという観点でも、
ASP.NET Coreへの移行 の効果は大きい

(ビルド エージェントに Visual Studio を入れる必要が無くなる)。
コンテナ化(.NETアプリをコンテナにデプロイ)を
視野に入れる場合は、なおさらである。

参考

WebApplications フォルダをコピー

Build Tools for Visual Studio

旧情報

Microsoft Learn


Tags: 移行, テスト, デバッグ, デプロイ, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally