分享方式:


NuGet 2.8 版本資訊

NuGet 2.7.2 版本資訊 | NuGet 2.8.1 版本資訊

NuGet 2.8 於 2014 年 1 月 29 日發行。

致謝

  1. [Llewellyn Pritchard](https://www.codeplex.com/site/users/view/leppie)@leppie
    • [#3466](https://nuget.codeplex.com/workitem/3466) - 封裝套件時,驗證相依性套件的標識碼。
  2. [Maarten Balliauw](https://www.codeplex.com/site/users/view/maartenba)@maartenballiauw
    • [#2379](https://nuget.codeplex.com/workitem/2379) - 在保存摘要認證時移除$metadata後綴。
  3. [Filip De Vos](https://www.codeplex.com/site/users/view/FilipDeVos)@foxtricks
    • [#3538](http://nuget.codeplex.com/workitem/3538) - 支援指定 nuget.exe update 命令的項目檔。
  4. [Juan Gonzalez](https://www.codeplex.com/site/users/view/jjgonzalez)
    • [#3536](http://nuget.codeplex.com/workitem/3536) - 未使用 -IncludeReferencedProjects 傳遞的取代令牌。
  5. [David Poole](https://www.codeplex.com/site/users/view/Sarkie)@Sarkie_Dave
    • [#3677](http://nuget.codeplex.com/workitem/3677) - 修正推送大型套件時,nuget.push 擲回 OutOfMemoryException。
  6. [Wouter Ouwens](https://www.codeplex.com/site/users/view/Despotes)
    • [#3666](http://nuget.codeplex.com/workitem/3666) - 修正項目參考另一個 CLI/C++ 專案時不正確的目標路徑。
  7. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph)@adamralph
    • [#3639](https://nuget.codeplex.com/workitem/3639) - 預設允許將套件安裝為開發相依性
  8. [David Fowler](https://www.codeplex.com/site/users/view/dfowler)@davidfowl
    • [#3717](https://nuget.codeplex.com/workitem/3717) - 移除對最新修補程式版本的隱含升級
  9. [Gregory Vandenbrouck](https://www.codeplex.com/site/users/view/vdbg)
    • NuGet.Server、nuget.exe鏡像命令等的數個錯誤修正和改善。
    • 這項工作在幾個月內完成,格雷戈里與我們合作,以正確的時機整合至 2.8 大師。

相依性的修補程式解析

解析套件相依性時,NuGet 已實作策略,以選取符合套件相依性的最低主要和次要套件版本。 不過,不同於主要和次要版本,修補程式版本一律會解析為最高版本。 雖然此行為是善意的,但它卻缺乏安裝具有相依性之套件的決定性。 請考慮下列範例:

PackageA@1.0.0 -[ >=1.0.0 ]-> PackageB@1.0.0

Developer1 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.0

PackageB@1.0.1 is published

Developer2 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.1

在此範例中,即使 Developer1 和 Developer2 安裝PackageA@1.0.0,但每個版本最終都會有不同版本的 PackageB。 NuGet 2.8 會變更此預設行為,讓修補程式版本的相依性解析行為與主要和次要版本的行為一致。 在上述範例中,不論更新的修補程式版本為何,都會安裝 PackageB@1.0.0,因為安裝 PackageA@1.0.0。

-DependencyVersion 參數

雖然 NuGet 2.8 會變更 解析相依性的預設 行為,但它也會透過套件管理員控制台中的 -DependencyVersion 參數,對相依性解析程式新增更精確的控制。 參數可讓您將相依性解析為最低的可能版本(預設行為)、最高可能的版本,或最高的次要版本或修補程式版本。 此參數僅適用於 powershell 命令中的 install-package。

DependencyVersion Switch

DependencyVersion 屬性

除了上述詳述的 -DependencyVersion 參數之外,NuGet 也允許在 Nuget.Config 檔案中設定新的屬性,以定義預設值,如果未在叫用安裝套件中指定 -DependencyVersion 參數。 任何安裝套件作業的 NuGet 封裝管理員 對話方塊也會遵守此值。 若要設定此值,請將下列屬性新增至 Nuget.Config 檔案:

<config>
    <add key="dependencyversion" value="Highest" />
</config>

使用 -whatif 預覽 NuGet 作業

某些 NuGet 套件可能會有深層相依性圖表,因此,在安裝、卸載或更新作業期間,可以有所説明,以先查看會發生什麼情況。 NuGet 2.8 會將標準 PowerShell -whatif 參數新增至 install-package、uninstall-package 和 update-package 命令,以將命令套用至的整個封裝關閉可視化。 例如,在空白 ASP.NET Web 應用程式中執行 install-package Microsoft.AspNet.WebApi -whatif 會產生下列結果。

PM> install-package Microsoft.AspNet.WebApi -whatif
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.WebHost (≥ 5.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Core (≥ 5.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Client (≥ 5.0.0)'.
Attempting to resolve dependency 'Newtonsoft.Json (≥ 4.5.11)'.
Install Newtonsoft.Json 4.5.11
Install Microsoft.AspNet.WebApi.Client 5.0.0
Install Microsoft.AspNet.WebApi.Core 5.0.0
Install Microsoft.AspNet.WebApi.WebHost 5.0.0
Install Microsoft.AspNet.WebApi 5.0.0

降級套件

為了調查新功能,安裝套件的發行前版本並不少見,然後決定回復到最後一個穩定版本。 在 NuGet 2.8 之前,這是卸載發行前版本套件及其相依性的多重步驟程式,然後安裝舊版。 不過,使用 NuGet 2.8 時,更新套件現在會將整個套件關閉(例如套件的相依性樹狀結構)復原至舊版。

開發相依性

許多不同類型的功能都可以以 NuGet 套件的形式提供,包括用來優化開發程式的工具。 這些元件雖然有助於開發新套件,但在稍後發佈時,不應被視為新套件的相依性。 NuGet 2.8 可讓套件將檔案中 .nuspec 本身識別為 developmentDependency。 安裝時,此元數據也會新增至 packages.config 安裝套件的項目檔案。 當該 packages.config 檔案稍後在 期間 nuget.exe pack針對 NuGet 相依性進行分析時,它會排除標示為開發相依性的相依性。

適用於不同平台的個別 packages.config 檔案

針對多個目標平臺開發應用程式時,每個個別建置環境都有不同的專案檔很常見。 在不同的項目檔中,也常會取用不同的 NuGet 套件,因為套件對不同平臺有不同的支援層級。 NuGet 2.8 藉由為不同的平臺特定項目檔建立不同的 packages.config 檔案,為此案例提供改善的支援。

Multiple package.config files

後援至本機快取

雖然 NuGet 套件通常會從遠端資源庫取用,例如 使用網路連線的 NuGet 資源庫 ,但有許多情況下用戶端未連線。 如果沒有網路連線,NuGet 用戶端就無法成功安裝套件,即使這些套件已在本機 NuGet 快取中的用戶端電腦上也一樣。 NuGet 2.8 會將自動快取後援新增至套件管理員控制台。 例如,當中斷網路適配器並安裝 jQuery 時,控制台會顯示下列內容:

PM> Install-Package jquery
The source at nuget.org [https://www.nuget.org/api/v2/] is unreachable. Falling back to NuGet Local Cache at C:\Users\me\AppData\Local\NuGet\Cache
Installing 'jQuery 2.0.3'.
Successfully installed 'jQuery 2.0.3'.
Adding 'jQuery 2.0.3' to WebApplication18.
Successfully added 'jQuery 2.0.3' to WebApplication18.

快取後援功能不需要任何特定的命令自變數。 此外,快取後援目前只能在套件管理員控制台中運作 - 此行為目前無法在套件管理員對話框中運作。

WebMatrix NuGet 用戶端 更新

除了 NuGet 2.8 之外,WebMatrix 的 NuGet 延伸模組也已更新,以包含使用 NuGet 2.5 提供的許多主要功能。 新功能包括「全部更新」、「最低 NuGet 版本」,以及允許覆寫內容檔案等新功能。

若要更新 WebMatrix 3 中的 NuGet 封裝管理員 擴充功能:

  1. 開啟 WebMatrix 3
  2. 按兩下功能區中的 [延伸模組] 圖示
  3. 選取 [更新] 索引標籤
  4. 按兩下即可將 NuGet 封裝管理員 更新為 2.5.0
  5. 關閉並重新啟動 WebMatrix 3

這是 NuGet 小組針對 WebMatrix 的第一個 NuGet 封裝管理員 延伸模組版本。 此程式代碼最近由 Microsoft 參與開放原始碼 NuGet 專案。 先前,NuGet 整合已內建於 WebMatrix 中,且無法從 WebMatrix 更新頻外。 我們現在能夠與 NuGet 的其餘用戶端工具一起進一步更新它。

錯誤修正

其中一個主要錯誤修正是在 update-package -reinstall 命令中改善效能。

除了這些功能和上述效能修正之外,此 NuGet 版本也包含許多其他錯誤修正。 版本中已解決 181 個問題。 如需 NuGet 2.8 中修正的工作專案完整清單,請檢視 [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.8&status=all)