適用於 WebMatrix 的 NuGet 2.6.1 版本資訊 | NuGet 2.7.1 版本資訊
NuGet 2.7 已於 2013 年 8 月 22 日發行。
致謝
我們要感謝下列外部參與者對 NuGet 2.7 的重大貢獻:
-
[Mike Roth](http://www.codeplex.com/site/users/view/mxrss)(@mxrss)- 列出套件時顯示授權網址,詳細說明詳細資訊。
-
[Adam Ralph](http://www.codeplex.com/site/users/view/adamralph)(@adamralph)-
[#1956](http://nuget.codeplex.com/workitem/1956)- 將 developmentDependency 屬性新增至packages.config並在 pack 命令中使用它,以僅包含執行階段套件
-
-
[Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael)(@tkrafael)- 避免在 nuget.exe 的 pack 指令中重複使用屬性鍵。
-
[Ben Phegan](http://www.codeplex.com/site/users/view/benphegan)(@BenPhegan)-
[#2610](http://nuget.codeplex.com/workitem/2610)- 將機器快取大小增加到 200。
-
-
[Slava Trenogin](http://www.codeplex.com/site/users/view/derigel)(@derigel)-
[#3217](http://nuget.codeplex.com/workitem/3217)- 修復 NuGet 對話框在錯誤的選項卡中顯示更新的問題 - 修復 Project.TargetFramework 在 ProjectManager 中可能為空
-
[#3248](http://nuget.codeplex.com/workitem/3248)- 修正 SharedPackageRepository 的 FindPackage/FindPackagesById 在 packageId 不存在時會失敗的問題
-
-
[Kevin Boyle](http://www.codeplex.com/site/users/view/KevinBoyleRG)(@kevfromireland)-
[#3234](http://nuget.codeplex.com/workitem/3234)- 啟用對 Nomad 專案的支援
-
-
[Corin Blaikie](http://www.codeplex.com/site/users/view/corinblaikie)(@corinblaikie)-
[#3252](http://nuget.codeplex.com/workitem/3252)- 修正檔案不存在時推送命令失敗並顯示結束碼 0。
-
[Martin Veselý](http://www.codeplex.com/site/users/view/veselkamartin)-
[#3226](http://nuget.codeplex.com/workitem/3226)- 修正專案參考資料庫專案時 Add-BindingRedirect 命令的錯誤。
-
-
[Miroslav Bajtos](http://www.codeplex.com/site/users/view/miroslavbajtos)(@bajtos)-
[#2891](http://nuget.codeplex.com/workitem/2891)- 修正 nuget.pack 剖析 'exclude' 屬性中通配符錯誤解析的問題。
-
-
[Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981)(@zippy1981)-
[#3307](http://nuget.codeplex.com/workitem/3307)- 修正還原套件時未將 $(Platform) 傳遞給 nuget.exe 的錯誤NuGet.targets。
-
[Brian Federici](http://www.codeplex.com/site/users/view/benerdin)-
[#3294](http://nuget.codeplex.com/workitem/3294)- 修正 nuget.exe 套件命令中的錯誤,該錯誤允許新增名稱相同但大小寫不同的檔案,最終導致「項目已存在」異常。
-
-
[Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino)(@kzu)-
[#2990](http://nuget.codeplex.com/workitem/2990)- 將 Version 屬性新增至 NetPortableProfile 類別。
-
[David Simner](https://www.codeplex.com/site/users/view/DavidSimner)-
[#3460](https://nuget.codeplex.com/workitem/3460)- 修正當 requireApiKey = true 而標頭 X-NUGET-APIKEY 缺失時會發生的 NullReferenceException 錯誤
-
-
[Michael Friis](https://www.codeplex.com/site/users/view/friism)(@friism)-
[#3278](https://nuget.codeplex.com/workitem/3278)- 修正 NuGet.Build 目標檔案,使其在 MonoDevelop 上正常運作
-
-
[Pranav Krishnamoorthy](https://www.codeplex.com/site/users/view/pranavkm)(@pranav_km)- 透過增加平行化來改善還原命令效能
版本中的顯著功能
預設套件還原 (在隱含同意的情況下)
NuGet 2.7 引進了套件還原的新方法,也克服了主要障礙:套件還原同意現在預設為開啟! 新方法和隱含同意的結合將大幅簡化套件還原案例。
默示同意
使用 NuGet 2.0、2.1、2.2、2.5 和 2.6 版時,使用者必須明確允許 NuGet 在建置期間下載遺失的套件。 如果尚未明確給予此同意,則在使用者授與同意之前,已啟用套件還原的解決方案將無法建置。
從 NuGet 2.7 開始,套件還原同意預設為開啟,同時允許使用者視需要使用 Visual Studio 中 NuGet 設定中的複選框,明確 選擇退出 套件還原。 隱含同意的這項變更會影響下列環境中的 NuGet:
- Visual Studio 2013 預覽版
- Visual Studio 2012
- Visual Studio 2010
- nuget.exe Command-Line 實用程式
Visual Studio 中的自動套件還原
從 NuGet 2.7 開始,NuGet 會在 Visual Studio 中建置期間自動下載遺失的套件,即使尚未明確啟用解決方案套件還原也一樣。 當您建置專案或解決方案時,會在 Visual Studio 中進行此自動套件還原,但在叫用 MSBuild 之前。 這帶來了一些顯著的好處:
- 無需再在解決方案上使用 [啟用 NuGet 套件還原] 操作
- 不需要修改專案,而且 NuGet 不會變更您的專案,以確保已啟用套件還原
- 所有 NuGet 套件,包括包含 props/目標檔案的 MSBuild 匯入套件,都會在執行 MSBuild 之前 還原,以確保在建置期間正確地辨識這些 props/目標檔案。
若要在 Visual Studio 中使用自動套件還原,您只需要採取一項 (in) 動作:
- 不要簽入您的
packages資料夾
有數種方法可從原始檔控制中省略資料夾 packages 。 如需詳細資訊,請參閱 套件和原始檔控制 主題。
雖然所有使用者都會隱含地選擇加入自動套件還原同意,但您可以透過 Visual Studio 中的套件管理員設定輕鬆選擇退出。
從命令列簡化套件還原
NuGet 2.7 引進了 nuget.exe的新功能: nuget.exe restore
這個新的 [還原] 命令可讓您接受解決方案檔案或資料夾作為引數,以單一命令輕鬆還原解決方案的所有套件。 此外,當目前資料夾中只有單一解決方案時,會隱含該引數。 這表示下列所有專案都可以從包含單一解決方案檔案 (MySolution.sln) 的資料夾中運作:
- nuget.exe 復原 MySolution.sln
- nuget.exe 恢復 。
- nuget.exe 還原
[還原] 命令會開啟解決方案檔案,並尋找解決方案內的所有專案。 從那裡,它將為每個項目找到 packages.config 檔案並還原所有找到的包。 它也會還原.nuget\packages.config檔案中所包含的方案層級套件。 如需有關新還原命令的詳細資訊,請參閱 Command-Line 參考。
新的套件還原工作流程
我們對套件還原的這些變更感到興奮,因為它引入了新的工作流程。 如果您想要省略套件,不將其提交到原始檔控制中的 packages 資料夾即可。 開啟並建置解決方案的 Visual Studio 使用者會看到套件自動還原。 對於命令列建置,只需在執行 msbuild 之前執行 nuget.exe restore。 您不再需要記得在解決方案上使用 [啟用 NuGet 套件還原] 手勢,而且我們不再需要修改您的專案來變更組建。 這同樣為包含 MSBuild 匯入的套件提供了更佳的使用體驗,特別是針對那些透過 NuGet 最近新增的功能(從 \build 資料夾自動匯入 props/targets 檔案)所添加的匯入。
除了我們自己所做的工作外,我們還與一些重要的合作夥伴合作,以完善這種新方法。我們還沒有具體的時間表,但每個合作夥伴都和我們一樣對新方法感到興奮。
- Team Foundation 服務 - 他們正在努力將呼叫整合
nuget.exe restore到預設組建案例中。 - Windows Azure 網站 - 他們正在努力允許您將專案推送到 Azure,並在建置網站之前呼叫
nuget.exe restore。 - TeamCity - 他們正在更新 TeamCity 8.x 的 NuGet 安裝程式外掛程式
- AppHarbor - 他們正在努力允許您將代碼庫推送到 AppHarbor,並讓
nuget.exe restore在解決方案構建之前被調用。
對於上述每個合作夥伴,他們都會使用自己的 nuget.exe 副本,而您不需要在解決方案中攜帶 nuget.exe。
已知問題
初始 2.7 版本中的 nuget.exe 還原有兩個已知問題,但它們已於 2013 年 9 月 6 日透過更新 NuGet.CommandLine 套件而得到修正。 CodePlex 上[NuGet 2.7 download page](https://nuget.codeplex.com/releases/view/107605)也提供此更新。 運行 nuget.exe update -self 會更新至最新版本。
固定的有:
[New package restore doesn't work on Mono when using SLN file](https://nuget.codeplex.com/workitem/3596)[New package restore doesn't work with Wix projects](https://nuget.codeplex.com/workitem/3598)
新的套件還原工作流程中也存在一個已知問題,即 [Automatic Package Restore does not work for projects under a solution folder](https://nuget.codeplex.com/workitem/3625)。 此問題已在 NuGet 2.7.1 中修正。
專案重新定位和升級組建錯誤/警告
很多時候,在重新鎖定目標或升級專案之後,您會發現某些 NuGet 套件無法正常運作。 不幸的是,沒有跡象表明這一點,也沒有關於如何解決它的指導。 在 NuGet 2.7 中,我們現在會使用一些 Visual Studio 事件來辨識您何時以影響已安裝 NuGet 套件的方式重新鎖定或升級專案。
如果我們偵測到您的任何套件受到重新定位或升級的影響,我們會立即產生建構錯誤,通知您。 除了立即組建錯誤之外,我們也會在您的requireReinstallation="true"檔案中保留受packages.config重新鎖定目標影響之所有套件的旗標,而 Visual Studio 中的每個後續組建都會引發這些套件的組建警告。
雖然 NuGet 無法採取自動動作來重新安裝受影響的套件,但我們希望此指示和警告可協助您探索何時需要重新安裝套件。 我們也正在開發這些錯誤訊息會引導您前往的 套件重新安裝指引檔 。
NuGet 組態預設值
許多公司都在內部使用 NuGet,但很難引導開發人員使用內部套件來源而不是 nuget.org。NuGet 2.7 引進了設定預設值功能,可針對下列專案指定全機器預設值:
- 已啟用的套件來源
- 已註冊但已停用的套件來源
- 預設 nuget.exe 推送來源
現在,每個項目都可以在位於 的 %ProgramData%\NuGet\NuGetDefaults.Config檔案中設定。 如果此設定檔中指定了套件來源,則不會自動註冊預設的 nuget.org 套件來源,而是會註冊在 NuGetDefaults.Config 中的那些。
雖然不需要使用此功能,但我們希望公司使用 NuGetDefaults.Config 組策略部署文件。
請注意,這項功能絕不會導致從開發人員的 NuGet 設定中移除套件來源。 這表示如果開發人員已使用 NuGet,因此已註冊 nuget.org 套件來源,則在建立 NuGetDefaults.Config 檔案之後不會移除它。
如需此功能的詳細資訊,請參閱 NuGet 設定預設值。
重新命名預設套件來源
NuGet 一律會註冊名為「NuGet 官方套件來源」的預設套件來源,該來源指向 nuget.org。這個名字很冗長,也沒有具體說明它實際上指向哪裡。 為了解決這兩個問題,我們已將此套件來源重新命名為在 UI 中簡單地「nuget.org」。 套件來源的 URL 也已變更為包含 “www.” 前置詞。 使用 NuGet 2.7 之後,您現有的「NuGet 官方套件來源」會自動更新為「nuget.org」作為其名稱,並更新為「https://www.nuget.org/api/v2/」作為其 URL。
效能改進
我們在 2.7 中進行了一些性能改進,這將產生更小的內存佔用、更少的磁盤使用量和更快的軟件包安裝。 我們也對基於 OData 的資料源進行了更聰明的查詢,這將減少整體負載。
新的擴充性 API
我們在擴充性服務中新增了一些新的 API,以填補先前版本中缺少功能的空白。
IVsPackageInstallerServices
// Checks if a NuGet package with the specified Id and version is installed in the specified project.
bool IsPackageInstalledEx(Project project, string id, string versionString);
// Get the list of NuGet packages installed in the specified project.
IEnumerable<IVsPackageMetadata> GetInstalledPackages(Project project);
IVsPackageInstaller
// Installs one or more packages that exist on disk in a folder defined in the registry.
void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);
// Installs one or more packages that are embedded in a Visual Studio Extension Package.
void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);
僅供開發階段使用的相依性
此功能由 Adam Ralph 提供,它允許套件作者宣告僅在開發時使用且不需要套件相依性的相依性。 透過在 中developmentDependency="true"packages.config新增nuget.exe pack屬性至套件,將不再包含該套件作為相依性。
已移除對 Visual Studio 2010 Express for Windows Phone 的支援
2.7 中的新套件還原模型是由新的 VSPackage 實作,這與主要 NuGet VSPackage 不同。 由於技術問題,這個新的 VSPackage 無法在 Visual Studio 2010 Express for Windows Phone SKU 中正常運作,因為我們與其他支援的 Visual Studio SKU 共用相同的程式碼基底。 因此,從 NuGet 2.7 開始,我們將從已發佈的延伸模組中捨棄對 Visual Studio 2010 Express for Windows Phone 的支援。 Visual Studio 2010 Express for Web 的支援仍包含在發佈至 Visual Studio 延伸模組資源庫的主要延伸模組中。
由於我們不確定有多少開發人員仍在該版本/版本的 Visual Studio 中使用 NuGet,因此我們會針對這些使用者發佈個別的 Visual Studio 延伸模組,並將其發佈到 CodePlex (而不是 Visual Studio 延伸模組資源庫) 上。 我們不打算繼續維護該延期,但如果這影響了您,請通過在 CodePlex 上提交問題來告訴我們。
若要下載 NuGet 套件管理員 (適用於 Visual Studio 2010 Express for Windows Phone),請流覽頁面 [NuGet 2.7 Downloads](https://nuget.codeplex.com/releases/view/107605) 。
錯誤修正
除了這些功能之外,此版本的 NuGet 也包含許多其他錯誤修正。 該版本總共解決了 97 個問題。 如需查看 NuGet 2.7 中修正的工作專案完整清單,請檢視 [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.7&status=all)。