Azure Pipelines:MSB4019「The imported project ... was not found」(WebApplication.targets・SqlTasks.targets)
従来の ASP.NET の Web アプリケーション プロジェクトは Microsoft.WebApplication.targets を、SQL Server のデータベース プロジェクトは Microsoft.Data.Tools.Schema.SqlTasks.targets を読み込みます。どちらのファイルも、.NET SDK ではなく Visual Studio か Visual Studio のビルド ツールと一緒に入ります。プロジェクトを dotnet build でビルドしたり、それが入っていないエージェントでビルドしたりすると、MSBuild はファイルのないフォルダーを探し、MSB4019 で止まります。
失敗しているビルドがプルリクエストのビルド検証なら、プルリクエストはそれを待っています:JetBrains IDE のプラグイン Azure DevOps Pull Requests は、プルリクエストのブランチ ポリシーを状態つきで Rider に並べ、Pro なら直しを push したあとに、失敗したビルド ポリシーをもう一度動かせます。JetBrains Marketplace で入れる
出るメッセージ
error MSB4019: The imported project "C:\Program Files\dotnet\sdk\8.0.x\Microsoft\VisualStudio\v17.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets", which evaluated to "...", is correct, and that the file exists on disk.(読み込むプロジェクトが見つからない。Import の式と、ファイルがディスクにあるかを確かめよ、という意味)- データベース プロジェクトでは、同じメッセージが
...\Microsoft\VisualStudio\v17.0\SSDT\の下のMicrosoft.Data.Tools.Schema.SqlTasks.targetsを名指しします。 - パスの先頭のフォルダーを見てください。
dotnet\sdk\なら、.NET Core のタスクかdotnet buildのスクリプトを通して、.NET SDK の MSBuild が動いています。その拡張のフォルダーは SDK の中にあり、この targets はそこには入りません。Visual Studio のフォルダーなら、Visual Studio の MSBuild が動いたものの、そのファイルを入れるワークロードがありません。.NET Core のタスクでは、このエラーのあとに Dotnet command failed with non-zero exit code が続きます。
Microsoft がホストするエージェント:Visual Studio の MSBuild でビルドする
- Windows のイメージ
windows-2022・windows-2025・windows-2025-vs2026には、ASP.NET と Web 開発のワークロードと、SQL Server Data Tools のコンポーネントを入れた Visual Studio Enterprise があります(runner-images のリポジトリにある各イメージの readme のコンポーネントの一覧)。なので、Visual Studio の MSBuild を通せば、どちらの targets もあります。使うのは .NET Core のタスクではなく、Visual Studio Build のタスク(VSBuild@1)か MSBuild のタスク(MSBuild@1)です。 - 従来の Web プロジェクトの最小のジョブ:
pool: vmImage: windows-2022 steps: - task: NuGetCommand@2 inputs: restoreSolution: '**/*.sln' - task: VSBuild@1 inputs: solution: '**/*.sln' platform: 'Any CPU' configuration: 'Release' - Ubuntu と macOS のイメージには Visual Studio がありません。従来の ASP.NET のプロジェクトは .NET Framework 向けなので、Windows のイメージでビルドします。
セルフホストのエージェント:ビルド ツールのワークロード
- Visual Studio のビルド ツールのインストーラーには、それぞれのファイルのためのワークロードがあります(Microsoft のビルド ツールのワークロードの一覧)。Web アプリケーション用の MSBuild のタスクと targets が入る Web 開発ビルド ツール(
Microsoft.VisualStudio.Workload.WebBuildTools)と、SQL Server のデータベース プロジェクト用のデータ ストレージと処理のビルド ツール(Microsoft.VisualStudio.Workload.DataBuildTools)です。 - たとえば
vs_buildtools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools --add Microsoft.VisualStudio.Workload.DataBuildTools --includeRecommended --quiet --wait。入っているビルド ツールに、Visual Studio Installer から足しても構いません。そのあとエージェントを再起動して新しい機能(capabilities)を報告させ、Visual Studio Build か MSBuild のタスクでビルドします。
データベース プロジェクト:SDK 形式
- Microsoft の新しい形式の SQL プロジェクトは、プロジェクト SDK
Microsoft.Build.Sqlを使い、dotnet buildでビルドし、.NET 8 以降でどのプラットフォームでも動きます。Linux のエージェントでもビルドできます(Microsoft の SQL データベース プロジェクトの概要)。.sqlprojを移せば SSDT の targets は要らなくなります。ただし Visual Studio でのこの形式の対応はまだプレビューなので、プロジェクトを編集する人が開けるかを先に確かめてください。
targets の写しを入れたパッケージ
- 古い回答には、Web の targets の写しを入れて
dotnet buildから見つけられるようにする NuGet のパッケージMSBuild.Microsoft.VisualStudio.Web.targetsが出てきます。Microsoft が出しているものではなく、最新の版は 14.0.0.3(Visual Studio 2015 の targets)で、データベース プロジェクトには効きません。Windows のエージェントで Visual Studio 自身の MSBuild を使う方が素直な直し方です。
IntelliJ IDEA と Rider で Azure DevOps のプルリクエスト
Azure DevOps Pull Requests は、JetBrains IDE 2024.1 以降と Android Studio で動く Lesstep のプラグインです。git のリモートから組織・プロジェクト・リポジトリを読み、あなたのレビュー待ちのプルリクエストを IDE のツール ウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも動きます。プルリクエストのブランチ ポリシーを状態つきで見せるので、通っていない必須のビルドがプルリクエストの隣に出ます。Pro なら、失敗したビルド ポリシーや期限の切れたビルド ポリシーをそこからもう一度動かせます。レビューの受信箱は無料、投票・コメント・完了・作成は Pro(30日の無料試用つき)。
Azure DevOps・Azure Pipelines・.NET・ASP.NET・SQL Server・Visual Studio は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:MSB3644:参照アセンブリが見つからない · Dotnet command failed with non-zero exit code · 要求を満たすエージェントがない · English