Azure Pipelines:MSB3644「The reference assemblies for .NETFramework were not found」
.NET Framework のプロジェクトをビルドするには、そのプロジェクトのフレームワークのバージョンの参照アセンブリ(ターゲット パック)がエージェントに要ります。そのバージョンがなければ、ビルドは MSB3644 で止まります。Microsoft がホストする Windows のイメージには一部のバージョンのパックしかなく、多くの回答が勧める Windows Server 2019 のイメージは、2025年12月31日に廃止されました(ホストされたエージェントについての Microsoft のページ)。Azure DevOps でのこのエラーの Stack Overflow の質問は、合わせて14万回以上見られています。
失敗しているビルドがプルリクエストのビルド検証なら、プルリクエストはそれを待っています:JetBrains IDE のプラグイン Azure DevOps Pull Requests は、プルリクエストのブランチ ポリシーを状態つきで Rider に並べ、Pro なら直しを push したあとに、失敗したビルド ポリシーをもう一度動かせます。JetBrains Marketplace で入れる
どう見えるか
error MSB3644: The reference assemblies for .NETFramework,Version=v4.6.1 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application.- .NET Core のタスクでは Dotnet command failed with non-zero exit code の前に、Visual Studio Build や MSBuild のタスクでは
Process 'msbuild.exe' exited with code '1'の前に出ます。
ホストされたイメージにあるバージョン
Azure Pipelines も使う runner-images のリポジトリの、イメージごとの readme にある Visual Studio のコンポーネントから:
windows-2022とwindows-2025(いまはwindows-latestも):4.5.2、4.6、4.6.2、4.7、4.7.1、4.7.2、4.8、4.8.1。windows-2025-vs2026:4.6.2、4.7、4.7.1、4.7.2、4.8、4.8.1。4.5.2 と 4.6 はありません。Microsoft は、windows-latestがこのイメージを指すようになり、windows-2025も Visual Studio 2026 に移ると言っています。いまwindows-latestでビルドできている 4.5.2 や 4.6 のプロジェクトは、そのときに MSB3644 になります。- どれにもないもの:4.0、4.5、4.5.1、そして一番よくある質問のバージョンの 4.6.1。
NuGet から参照アセンブリ
Microsoft.NETFramework.ReferenceAssembliesのパッケージは、.NET Framework 2.0 から 4.8.1 までの参照アセンブリをビルドに持ち込むので、エージェントにターゲット パックが要りません。プロジェクトに<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="All" />を足し、ビルドの前に復元します。SDK 形式のプロジェクトでも、昔からの形式のプロジェクトでも使えます(パッケージの readme)。まだpackages.configを使っているプロジェクトは、先にPackageReferenceに移します。- .NET SDK でビルドする SDK 形式のプロジェクトは、パックがないとき、このパッケージを自分で足します。なので MSB3644 が出るのはたいてい、Visual Studio Build や MSBuild のタスクでビルドする、昔からの形式のプロジェクトです。
新しいターゲット フレームワーク
- .NET Framework 4.5.2・4.6・4.6.1 のサポートは2022年4月26日に終わっていて(Microsoft のお知らせ)、イメージから消えていくのはそのためです。プロジェクトを 4.6.2 以降、できれば 4.8 か 4.8.1 にすると、どのホストされたイメージでもビルドできます。ただしビルドだけでなく、試験の要る変更です。
セルフホストのエージェント
- 自分のエージェントには、そのバージョンの開発者パック(かターゲット パック)を、Microsoft の .NET Framework のダウンロードか Visual Studio のインストーラーで入れ、エージェントを再起動します。
「.NETFramework,Version=v5.0」
- このメッセージのバージョンが 5.0 以上なら、.NET 5 以降のプロジェクトを、それを知らない古い MSBuild か NuGet がビルドしていて、
net5.0を .NET Framework として読んでいます。これについての質問の採用された回答は、UseDotNet@2で SDK を入れ、.NET Core のタスクでビルドすることです。
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・.NET Framework・Visual Studio は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:Dotnet command failed with non-zero exit code · dotnet のタスクがプロジェクトを見つけられない · 要求を満たすエージェントがない · English