NuGet 2.1 版本資訊
NuGet 2.0 版本資訊 | NuGet 2.2 版本資訊
NuGet 2.1 於 2012 年 10 月 4 日發行。
NuGet 2.1 可讓您透過遞歸方式逐步執行尋找檔案的資料夾結構 NuGet.Config
,然後從所有找到的檔案集建置組態,讓您更彈性地控制 NuGet 設定。 例如,假設小組有內部套件存放庫供其他內部相依性建置的 CI 建置。 個別項目的資料夾結構可能如下所示:
C:\
C:\myteam\
C:\myteam\solution1
C:\myteam\solution1\project1
此外,如果解決方案已啟用套件還原,則也會有下列資料夾:
C:\myteam\solution1\.nuget
為了讓小組的內部套件存放庫可供小組運作的所有專案使用,同時無法提供給計算機上的每個專案使用,我們可以建立新的 Nuget.Config 檔案,並將它放在 c:\myteam 資料夾中。 無法為每個專案指定 packages 資料夾。
<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 可透過 repositoryPath
檔案中的 NuGet.Config
元素,更細微地控制 packages 資料夾的位置。 以先前的階層式 Nuget.Config 支援範例為基礎,假設我們想要讓 C:\myteam\ 下的所有項目共用相同的 packages 資料夾。 若要達成此目的,只要將下列專案新增至 c:\myteam\Nuget.Config
即可。
<configuration>
<config>
<add key="repositoryPath" value="C:\myteam\teampackages" />
</config>
...
</configuration>
在此範例中,共用 Nuget.Config
檔案會針對在 C:\myteam 底下建立的每個專案指定共用套件資料夾,而不論深度為何。 請注意,如果您的方案根目錄下有現有的 packages 資料夾,您必須先刪除它,NuGet 才會將套件放在新的位置。
可攜式連結庫是 .NET 4 首次推出的功能,可讓您建置可在不同 Microsoft 平臺上運作的元件,從 the.NET Framework 版本到 Silverlight 到 Windows 電話 甚至 Xbox 360(雖然目前,NuGet 不支援 Xbox 可攜式連結庫目標)。 藉由擴充架構版本和配置檔的 套件慣例 ,NuGet 2.1 現在可讓您建立具有復合架構和配置檔目標 lib
資料夾的套件,以支援可攜式連結庫。
例如,請考慮下列可攜式類別庫的可用目標平臺。
建置連結庫並執行 命令 nuget.exe pack MyPortableProject.csproj
之後,即可查看新的可攜式連結庫套件資料夾結構,方法是檢查產生的 NuGet 套件內容。
如您所見,可攜式連結庫文件夾名稱慣例遵循模式 'portable-{framework 1}+{framework n}',其中架構標識符遵循現有的 架構名稱和版本慣例。 在用於 Windows 電話 的架構識別碼中找到名稱和版本慣例的一個例外狀況。 此 Moniker 應該使用架構名稱 『wp』 (wp7、wp71 或 wp8)。 例如,使用 'silverlight-wp7' 會導致錯誤。
安裝從這個資料夾結構建立的套件時,NuGet 現在可以將其架構和配置檔規則套用至多個目標,如資料夾名稱中所指定。 NuGet 比對規則背後的原則是「更具體」的目標優先於「較不特定的」目標。 這表示目標為特定平臺的Moniker一律優先於可攜式平臺,如果兩者都與專案相容。 此外,如果多個可攜式目標與專案相容,NuGet 會偏好支援的平臺集「最接近」參考套件的專案。
除了新增針對可攜式連結庫項目的支援之外,NuGet 2.1 還會為 Windows 8 市集和 Windows 電話 8 專案提供新的架構 Moniker,以及 Windows 市集和 Windows 電話 專案的一些新一般 Moniker,這些專案在未來版本的個別平臺中更容易管理。
針對 Windows 8 市集應用程式,識別碼如下所示:
NuGet 2.0 和更早版本 | NuGet 2.1 |
---|---|
winRT45, 。NETCore45 | Windows, Windows8, win, win8 |
針對 Windows 電話 項目,識別符如下所示:
電話 OS | NuGet 2.0 和更早版本 | NuGet 2.1 |
---|---|---|
Windows Phone 7 | silverlight3-wp | wp、wp7、Windows 電話、Windows 電話 7 |
Windows 電話 7.5 (芒果) | silverlight4-wp71 | wp71、Windows 電話 71 |
Windows Phone 8 | (不支援) | wp8、Windows 電話 8 |
在上述所有變更中,NuGet 2.1 將繼續完全支援舊的架構名稱。 接下來,應該使用新名稱,因為它們在未來版本的個別平臺中會更加穩定。 不過,在 2.1 之前的 NuGet 版本中,新名稱將會支援 *not* ,因此請據以規劃何時進行切換。
在過去幾個反覆專案中,NuGet 資源庫已引進變更,大幅改善了套件搜尋的速度和相關性。 不過,這些改進僅限於 nuget.org 網站。 NuGet 2.1 可透過 [NuGet 套件管理員] 對話方塊來改善搜尋體驗。 例如,假設您想要尋找 Windows Azure 快取預覽版套件。 此套件的合理搜尋查詢可能是「Azure 快取」。 在舊版的套件管理員對話框中,所需的套件甚至不會列在結果的第一頁。 不過,在 NuGet 2.1 中,所需的套件現在會顯示在搜尋結果頂端。
在 NuGet 2.1 之前,NuGet 會在版本號碼不高時略過更新套件。 這為特定案例帶來了摩擦,特別是在組建或 CI 案例中,小組不想隨著每個組建遞增套件版本號碼的情況。 想要的行為是強制更新,而不管怎樣。 NuGet 2.1 會使用 「重新安裝」旗標來解決此問題。 例如,嘗試更新沒有較新套件版本的套件時,舊版 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 套件的正確元件參考。
在舊版 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)
。