NuGet 自動包還原不適用於 MSBuild
我正在嘗試使用 MSBuild 12.0建構一個
packages缺少內容(內部除外)的解決方案。repositories.config我希望它在建構之前自動恢復所有失去的包,但事實並非如此——MsBuild 報告了大量錯誤:“您是否缺少 using 指令或程序集引用?”
NuGet Manager 是 2.7(我在 Visual Studio 2013 中看到了這個關於框)。我什至試圖傳遞
EnableNuGetPackageRestore=true參數 - 沒有運氣。我錯過了什麼?
使用最新的官方 NuGet 文件更新 v3.3.0
包恢復方法
NuGet 提供了三種使用包還原的方法。
**自動包還原**是 NuGet 團隊推薦的在 Visual Studio 中進行包還原的方法,它是在 NuGet 2.7 中引入的。從 NuGet 2.7 開始,NuGet Visual Studio 擴展集成到 Visual Studio 的生成事件中,並在生成開始時恢復失去的包。預設情況下啟用此功能,但如果需要,開發人員可以選擇退出。
以下是它的工作原理:
- 在項目或解決方案生成時,Visual Studio 會引發在解決方案中開始生成的事件。
- NuGet 響應此事件並檢查解決方案中包含的 packages.config 文件。
- 對於找到的每個 packages.config 文件,都會枚舉其包並檢查解決方案的封包件夾中是否存在。
- 任何失去的包都從使用者配置(和啟用)的包源下載,尊重包源的順序。
- 下載包後,會將它們解壓縮到解決方案的封包件夾中。
如果您安裝了 Nuget 2.7+;選擇一種方法來管理 Visual Studio 中的自動包還原非常重要。
有兩種方法可用:
- (Nuget 2.7+):Visual Studio -> 工具 -> 包管理器 -> 包管理器設置 -> 啟用自動包還原
- (Nuget 2.6 及更低版本)右鍵點擊解決方案並點擊“為此解決方案啟用包還原”。
從命令行建構解決方案時需要**命令行包還原;**它是在 NuGet 的早期版本中引入的,但在 NuGet 2.7 中得到了改進。
nuget.exe restore contoso.slnMSBuild 集成的包還原 方法是原始的包還原實現,儘管它在許多場景中繼續有效,但它並未涵蓋其他兩種方法解決的全部場景。
如果您使用的是 MSBuild 15 或更高版本附帶的 Visual Studio 2017 或更高版本,並且您的 .csproj 文件採用新
PackageReference格式,最簡單的方法是使用新的 MSBuildRestore目標。沒有人真正回答過最初的問題,即“在使用 MSBuild 從命令行建構時,如何讓 NuGet 包自動恢復?” 答案是:除非您使用“啟用 NuGet 包還原”選項(現在根據此參考已棄用),否則您不能(但請參見下文)。如果您嘗試在 CI 伺服器上進行自動化建構,這很糟糕。
然而,有一個稍微迂迴的方式來獲得所需的行為:
- 從https://dist.nuget.org/win-x86-commandline/latest/nuget.exe下載最新的 NuGet 執行檔,並將其放在 PATH 中的某個位置。(您可以將此作為預建構步驟。)
- 執行
nuget restore它將自動下載所有失去的包。- 執行
msbuild以建構您的解決方案。順便說一句:雖然新的和推薦的自動包恢復方法在您的版本控制中減少了混亂,但它也使命令行包恢復不可能,除非您跳過額外的下載和執行環節
nuget.exe。進步?
