閱讀英文

共用方式為


NuGet 2.7 版本資訊

NuGet 2.6.1 for WebMatrix 版本資訊 | NuGet 2.7.1 版本資訊

NuGet 2.7 於 2013 年 8 月 22 日發行。

致謝

我們想要感謝下列外部參與者對 NuGet 2.7 的重大貢獻:

  1. [Mike Roth](http://www.codeplex.com/site/users/view/mxrss)@mxrss
    • 列出套件和詳細資訊時顯示授權 URL。
  2. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph)@adamralph
    • [#1956](http://nuget.codeplex.com/workitem/1956) - 將 developmentDependency 屬性新增至 packages.config ,並在 pack 命令中使用它只包含運行時間套件
  3. [Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael)@tkrafael
    • 請避免nuget.exe pack 命令中的重複 Properties 索引鍵。
  4. [Ben Phegan](http://www.codeplex.com/site/users/view/benphegan)@BenPhegan
    • [#2610](http://nuget.codeplex.com/workitem/2610) - 將電腦快取大小增加到 200。
  5. [Slava Trenogin](http://www.codeplex.com/site/users/view/derigel)@derigel
    • [#3217](http://nuget.codeplex.com/workitem/3217) - 修正 NuGet 對話框,顯示錯誤索引標籤中的更新
    • 修正 Project.TargetFramework 在 ProjectManager 中可為 Null
    • [#3248](http://nuget.codeplex.com/workitem/3248) - 修正不存在的 packageId 上的 SharedPackageRepository FindPackage/FindPackagesById 將會失敗
  6. [Kevin Boyle](http://www.codeplex.com/site/users/view/KevinBoyleRG)@kevfromireland
    • [#3234](http://nuget.codeplex.com/workitem/3234) - 啟用 Nomad 項目的支援
  7. [Corin Blaikie](http://www.codeplex.com/site/users/view/corinblaikie)@corinblaikie
    • [#3252](http://nuget.codeplex.com/workitem/3252) - 修正推送命令失敗,檔案不存在時結束代碼 0。
  8. [Martin Veselý](http://www.codeplex.com/site/users/view/veselkamartin)
    • [#3226](http://nuget.codeplex.com/workitem/3226) - 在專案參考資料庫專案時,修正 Add-BindingRedirect 命令的錯誤。
  9. [Miroslav Bajtos](http://www.codeplex.com/site/users/view/miroslavbajtos)@bajtos
    • [#2891](http://nuget.codeplex.com/workitem/2891) - 修正 'exclude' 屬性中 nuget.pack 剖析通配符的錯誤。
  10. [Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981)@zippy1981
    • [#3307](http://nuget.codeplex.com/workitem/3307) - 修正錯誤 NuGet.targets 不會在還原套件時將 $(Platform) 傳遞至nuget.exe。
  11. [Brian Federici](http://www.codeplex.com/site/users/view/benerdin)
    • [#3294](http://nuget.codeplex.com/workitem/3294) - 修正nuget.exe套件命令中的錯誤,以允許新增具有相同名稱但不同大小寫的檔案,最終導致「專案已存在」例外狀況。
  12. [Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino)@kzu
    • [#2990](http://nuget.codeplex.com/workitem/2990) - 將 Version 屬性新增至 NetPortableProfile 類別。
  13. [David Simner](https://www.codeplex.com/site/users/view/DavidSimner)
    • [#3460](https://nuget.codeplex.com/workitem/3460) - 如果 requireApiKey = true,則修正 Bug NullReferenceException,但標頭 X-NUGET-APIKEY 不存在
  14. [Michael Friis](https://www.codeplex.com/site/users/view/friism)@friism
    • [#3278](https://nuget.codeplex.com/workitem/3278) - 修正 NuGet.Build 目標檔案,使其可在 MonoDevelop 上正常運作
  15. [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 開始,套件還原同意預設為 ON,同時允許用戶視需要明確 退出宣告 套件還原,並使用 Visual Studio 中 NuGet 設定中的複選框。 隱含同意的這項變更會影響下列環境中的 NuGet:

  • Visual Studio 2013 Preview
  • Visual Studio 2012
  • Visual Studio 2010
  • nuget.exe命令行公用程式

Visual Studio 中的自動套件還原

從 NuGet 2.7 開始,即使尚未針對解決方案明確啟用套件還原,NuGet 也會在 Visual Studio 建置期間自動下載遺失的套件。 當您建置專案或方案時,會在 Visual Studio 中執行此自動封裝還原,但在叫用 MSBuild 之前。 這會產生一些顯著的優點:

  1. 您解決方案上不需要進一步使用「啟用 NuGet 套件還原」手勢
  2. 專案不需要修改,NuGet 不會變更您的專案,以確保已啟用套件還原
  3. 所有 NuGet 套件,包括針對 props/targets 檔案包含 MSBuild 匯入的套件,都會在叫用 MSBuild 之前還原,以確保在建置期間正確辨識這些屬性/目標

若要在 Visual Studio 中使用自動封裝還原,您只需要採取一個 (in)動作:

  1. 不要存進資料夾packages

有數種方式可從原始檔控制省略資料夾 packages 。 如需詳細資訊,請參閱 套件和原始檔控制 主題。

雖然所有使用者都隱含加入自動套件還原同意,但您可以輕鬆地透過Visual Studio中的 封裝管理員 設定退出。

Package Manager Settings

從命令行還原簡化的套件

NuGet 2.7 引進了nuget.exe的新功能: nuget.exe restore

這個新的 Restore 命令可讓您藉由接受方案檔案或資料夾做為自變數,輕鬆地使用單一命令來還原方案的所有套件。 此外,當目前資料夾中只有單一解決方案時,就會隱含該自變數。 這表示下列所有工作都來自包含單一方案檔的資料夾(MySolution.sln):

  1. nuget.exe還原MySolution.sln
  2. nuget.exe還原 。
  3. 還原nuget.exe

[還原] 命令會開啟方案檔,並在方案內尋找所有專案。 它會從該處尋找 packages.config 每個項目的檔案,並還原找到的所有套件。 它也會還原檔案中找到 .nuget\packages.config 的解決方案層級套件。 如需有關新還原命令的詳細資訊,請參閱 命令行參考

新的套件還原工作流程

我們對套件還原的這些變更感到興奮,因為它引進了新的工作流程。 如果您想要省略原始檔控制中的套件,您只是不會認可 packages 資料夾。 開啟和建置解決方案的Visual Studio使用者將會看到套件自動還原。 針對命令列組建,只要在叫用 之前叫 nuget.exe restoremsbuild。 您不再需要記得在解決方案上使用「啟用 NuGet 套件還原」手勢,我們不再需要修改您的專案來改變組建。 這也會針對包含 MSBuild 匯入的套件產生許多改善的體驗,特別是針對透過 NuGet 最近功能新增的匯入,以便 從 \build 資料夾自動匯入 props/targets 檔案

除了我們自己所做的工作之外,我們還與一些重要合作夥伴合作,以全面解決這個新的方法。我們還沒有具體時程表,但每個合作夥伴都和我們對新方法一樣興奮。

  • Team Foundation Service - 他們正努力將 呼叫 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 將會更新至最新版本。

固定的為:

  1. [New package restore doesn't work on Mono when using SLN file](https://nuget.codeplex.com/workitem/3596)
  2. [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 套件的方式進行辨識。

如果我們偵測到您的任何套件都受到複位目標或升級的影響,我們將產生立即建置錯誤,讓您知道。 除了立即建置錯誤之外,我們也會針對所有受複位目標影響的套件,在您的檔案中packages.config保存requireReinstallation="true"旗標,Visual Studio 中的每個後續組建都會引發這些套件的組建警告。

雖然 NuGet 無法採取自動動作來重新安裝受影響的套件,但我們希望此指示和警告可引導您探索何時需要重新安裝套件。 我們也會處理 這些錯誤訊息引導您前往的套件重新安裝指引檔

NuGet 設定預設值

許多公司都在內部使用 NuGet,但很難引導其開發人員使用內部套件來源,而不是 nuget.org。NuGet 2.7 引進設定預設值功能,允許針對指定全機器的預設值:

  1. 已啟用的套件來源
  2. 已註冊,但已停用套件來源
  3. 默認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 電話 的支援

2.7 中的新套件還原模型是由與主要 NuGet VSPackage 不同的新 VSPackage 實作。 由於技術問題,這個新的 VSPackage 無法在 Visual Studio 2010 Express for Windows 電話 SKU 中正確運作,因為我們與其他支援的 Visual Studio SKU 共用相同的程式代碼基底。 因此,從 NuGet 2.7 開始,我們會從已發佈的延伸模組卸除對 Visual Studio 2010 Express for Windows 電話 的支援Visual Studio 2010 Express for Web 的支援仍包含在發佈至 Visual Studio 擴充功能庫的主要延伸模組中。

由於我們不確定有多少開發人員仍在該版本的Visual Studio中使用 NuGet,因此我們會特別針對這些使用者發佈個別的Visual Studio延伸模組,並在 CodePlex 上發布它(而不是 Visual Studio 擴充功能庫)。 我們不打算繼續維護該延伸模組,但如果這會影響您,請在 CodePlex 上提出問題來讓我們知道。

若要下載 NuGet 封裝管理員(適用於 Visual Studio 2010 Express for Windows 電話),請瀏覽[NuGet 2.7 Downloads](https://nuget.codeplex.com/releases/view/107605)頁面。

錯誤修正

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