NuGet 2.0 版本資訊 | NuGet 2.2 版本資訊
NuGet 2.1 已於 2012 年 10 月 4 日發行。
階層式 Nuget.Config
NuGet 2.1 可讓您更靈活地控制 NuGet 設定,方法是遞迴向上瀏覽資料夾結構,尋找 NuGet.Config 檔案,然後從所有找到的檔案集建置設定。 例如,請考慮這種情況:團隊有一個內部封裝儲存庫,專用於其他內部相依項目的 CI 建置。 個別專案的資料夾結構可能如下所示:
C:\
C:\myteam\
C:\myteam\solution1
C:\myteam\solution1\project1
此外,如果為解決方案啟用套件還原,也會存在下列資料夾:
C:\myteam\solution1\.nuget
為了讓小組的內部套件存放庫可供小組處理的所有專案使用,同時不讓它可供計算機上的每個專案使用,我們可以建立新的 Nuget.Config 檔案,並將它放在 c:\myteam 資料夾中。 無法為每個專案指定套件資料夾。
<configuration>
<packageSources>
<add key="Official project team source" value="http://teamserver/api/v2/" />
</packageSources>
<disabledPackageSources />
<activePackageSource>
<add key="Official project team source" value="http://teamserver/api/v2/" />
</activePackageSource>
</configuration>
我們現在可以看到,來源是透過從 c:\myteam 下的任何資料夾執行「nuget.exe sources」命令來新增的,如下所示:
NuGet.Config 檔案會依下列順序搜尋:
.nuget\Nuget.Config- 從專案資料夾遞迴遍歷到根目錄
- 全域
Nuget.Config(%appdata%\NuGet\Nuget.Config)
組態會以 相反的順序套用,這表示根據上述順序,會先套用全域 Nuget.Config,然後從根目錄到專案資料夾依序套用找到的 Nuget.Config 檔案,最後接著 .nuget\Nuget.Config。 如果您使用該 <clear/> 元素從配置中刪除一組項目,這一點尤其重要。
指定「套件」資料夾位置
過去,NuGet 會從解決方案根資料夾底下的已知 'packages' 資料夾管理解決方案的套件。 對於具有許多已安裝 NuGet 套件的不同解決方案的開發小組,這可能會導致在檔案系統上的許多不同位置安裝相同的套件。
NuGet 2.1 可在 NuGet.Config 檔案中的 repositoryPath 元素,提供對套件資料夾位置的更細緻控制。 以先前階層式 Nuget.Config 支援的範例為基礎,假設我們想要讓 C:\myteam\ 下的所有專案共用相同的套件資料夾。 若要完成此操作,只需將下列項目 c:\myteam\Nuget.Config新增至 。
<configuration>
<config>
<add key="repositoryPath" value="C:\myteam\teampackages" />
</config>
...
</configuration>
在此範例中,共用 Nuget.Config 檔案會針對在 C:\myteam 下建立的每個專案指定共用套件資料夾,而不論深度為何。 請注意,如果您的解決方案根目錄下方有現有的套件資料夾,您必須先刪除它,NuGet 才會將套件放在新位置。
支援可攜式程式庫
可攜式程式庫是 .NET 4 首次引進的功能,可讓您建置可在不同 Microsoft 平臺上運作的元件,而不需要修改,從 the.NET Framework 到 Silverlight,再到 Windows Phone,甚至 Xbox 360 (不過目前,NuGet 不支援 Xbox 可攜式程式庫目標)。 藉由擴充架構版本和配置檔的 套件慣例 ,NuGet 2.1 現在可讓您建立具有複合架構和配置檔目標 lib 資料夾的套件,以支援可攜式程式庫。
例如,請考慮下列可攜式類別庫的可用目標平臺。
建置程式庫並執行命令 nuget.exe pack MyPortableProject.csproj 之後,可以檢查所產生 NuGet 套件的內容,以查看新的可攜式程式庫套件資料夾結構。
如您所見,可攜式程式庫資料夾名稱慣例遵循「可攜式-{framework 1}+{framework n}」模式,其中架構識別碼遵循現有 的架構名稱和版本慣例。 名稱和版本慣例的一個例外是在用於 Windows Phone 的架構識別碼中找到。 此 Moniker 應該使用架構名稱 'wp' (wp7、wp71 或 wp8) 。 例如,使用 'silverlight-wp7' 會導致錯誤。
安裝從此資料夾結構建立的套件時,NuGet 現在可以將其架構和配置檔規則套用至多個目標,如資料夾名稱中所指定。 NuGet 的比對規則背後是「更具體」的目標優先於「不太具體」的目標原則。 這表示,當以特定平臺為目標的暱稱與專案同時相容時,這些暱稱會比可攜式平臺的暱稱更受重視。 此外,如果多個可攜式目標與專案相容,NuGet 會偏好支援的平臺集與參考套件的專案「最接近」的平臺。
以 Windows 8 和 Windows Phone 8 專案為目標
除了新增以可攜式程式庫專案為目標的支援之外,NuGet 2.1 還為 Windows 8 市集和 Windows Phone 8 專案提供新的架構名字名稱,以及 Windows 市集和 Windows Phone 專案的一些新的一般名字名稱,這些名稱將更容易在未來版本的各個平臺上進行管理。
針對 Windows 8 市集應用程式,識別碼如下所示:
| NuGet 2.0 和更早版本 | NuGet 2.1 |
|---|---|
| winRT45, .NETCore45 | Windows、Windows8、win、win8 |
針對 Windows Phone 專案,識別碼如下所示:
| 手機操作系統 | NuGet 2.0 和更早版本 | NuGet 2.1 |
|---|---|---|
| Windows Phone 7 | Silverlight3-WP | wp、wp7、WindowsPhone、WindowsPhone7 |
| Windows Phone 7.5 (芒果) | Silverlight4-WP71 | wp71、WindowsPhone71 |
| Windows Phone 8 | (不支援) | wp8、WindowsPhone8 |
在上述所有變更中,NuGet 2.1 將繼續完全支援舊的架構名稱。 展望未來,應該使用新名稱,因為它們在各自平台的未來版本中會更加穩定。 不過,2.1 之前的 NuGet 版本將*不*支援新名稱,因此請相應地規劃何時進行切換。
改進了在套件管理器對話框中的搜索
在過去的數次迭代中,NuGet 的資源庫進行了變更,大幅改善套件搜尋的速度和相關性。 然而,這些改進僅限於 nuget.org 網站。 NuGet 2.1 可透過 NuGet 套件管理員對話方塊提供改善的搜尋體驗。 例如,假設您想要尋找 Windows Azure 快取預覽套件。 此套件的合理搜尋詞可能是 “Azure Cache”。 在舊版的套件管理員對話方塊中,所需的套件甚至不會列在結果的第一頁上。 不過,在 NuGet 2.1 中,所需的套件現在會顯示在搜尋結果頂端。
強制更新套件
在 NuGet 2.1 之前,NuGet 會在版本號碼不高時略過更新套件。 這為某些案例帶來了摩擦,特別是在組建或 CI 案例中,團隊不想在每個組建中遞增套件版本號。 期望的行為是無論如何強制更新。 NuGet 2.1 會使用 'reinstall' 旗標來解決此問題。 例如,舊版的 NuGet 在嘗試更新沒有較新套件版本的套件時,會導致下列結果:
PM> Update-Package Moq
No updates available for 'Moq' in project 'MySolution.MyConsole'.
使用重新安裝標誌,無論是否有較新的版本,套件都會更新。
PM> Update-Package Moq -Reinstall
Successfully removed 'Moq 4.0.10827' from MySolution.MyConsole.
Successfully uninstalled 'Moq 4.0.10827'.
Successfully installed 'Moq 4.0.10827'.
Successfully added 'Moq 4.0.10827' to MySolution.MyConsole.
重新安裝旗標被證明有益的另一個場景是框架重新定位。 變更專案的目標架構時 (例如,從 .NET 4 變更為 .NET 4.5),Update-Package -Reinstall 可以更新專案中安裝之所有 NuGet 套件之正確元件的參考。
在 Visual Studio 內編輯套件來源
在舊版的 NuGet 中,從 Visual Studio 選項對話方塊內更新套件來源需要刪除並重新新增套件來源。 NuGet 2.1 會支援更新作為設定使用者介面的第一類函式,以改善此工作流程。
錯誤修正
NuGet 2.1 包含許多錯誤修正。 如需查看修正於 NuGet 2.0 中的工作專案完整清單,請檢視 [NuGet Issue Tracker for this release](http://nuget.codeplex.com/workitem/list/advanced?keyword=&status=Fixed&type=All&priority=All&release=NuGet%202.1&assignedTo=All&component=All&sortField=LastUpdatedDate&sortDirection=Descending&page=0)。