NuGet 2.5 版本資訊
NuGet 2.2.1 版本資訊 | NuGet 2.6 版本資訊
NuGet 2.5 於 2013 年 4 月 25 日發行。 這個版本太大了,我們覺得必須略過 2.3 版和 2.4 版! 到目前為止,這是我們針對 NuGet 所擁有的最大版本,在版本中已超過 [160 work items](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.5&status=all)
版本。
我們想要感謝下列外部參與者對 NuGet 2.5 的重大貢獻:
[Daniel Plaisted](https://www.codeplex.com/site/users/view/dsplaisted)
(@dsplaisted)[#2847](https://nuget.codeplex.com/workitem/2847)
- 將MonoAndroid、MonoTouch和MonoMac新增至已知的目標架構標識符清單。
[Andres G. Aragoneses](https://www.codeplex.com/site/users/view/knocte)
(@knocte)[#2865](https://nuget.codeplex.com/workitem/2865)
- 修正區分大小寫OS的拼字NuGet.targets
[David Fowler](https://www.codeplex.com/site/users/view/dfowler)
(@davidfowl)- 讓解決方案建置在Mono上。
[Andrew Theken](https://www.codeplex.com/site/users/view/atheken)
(@atheken)- 修正Mono上的單元測試失敗。
[Olivier Dagenais](https://www.codeplex.com/site/users/view/OliIsCool)
(@OliIsCool)[#2920](https://nuget.codeplex.com/workitem/2920)
- nuget.exe pack 命令不會將屬性傳播至 MSBuild
[Miroslav Bajtos](https://www.codeplex.com/site/users/view/MiroslavBajtos)
(@bajtos)[#1511](https://nuget.codeplex.com/workitem/1511)
- 修改的 XML 處理程式碼以保留格式。
[Adam Ralph](http://www.codeplex.com/site/users/view/adamralph)
(@adamralph)- 已將辨識字新增至自定義字典,以允許build.cmd成功。
[Bruno Roggeri](https://www.codeplex.com/site/users/view/broggeri)
- 修正在當地語系化 VS 中執行時的單元測試。
[Gareth Evans](https://www.codeplex.com/site/users/view/garethevans)
- 從 PackageService 擷取的介面
[Maxime Brugidou](https://www.codeplex.com/site/users/view/brugidou)
(@brugidou)[#936](https://nuget.codeplex.com/workitem/936)
- 封裝時處理專案相依性
[Xavier Decoster](https://www.codeplex.com/site/users/view/XavierDecoster)
(@XavierDecoster)[#2991](https://nuget.codeplex.com/workitem/2991)
,[#3164](https://nuget.codeplex.com/workitem/3164)
- 在 nuget.cofig 檔案中儲存套件來源認證時支援純文字密碼
[James Manning](http://www.codeplex.com/site/users/view/jmanning)
(@manningj)[#3190](http://nuget.codeplex.com/workitem/3190)
,[#3191](https://nuget.codeplex.com/workitem/3191)
- 修正 Get-Package 說明描述
我們也讚賞下列人員尋找 NuGet 2.5 Beta/RC 在最終版本之前核准和修正的 Bug:
[Tony Wall](https://www.codeplex.com/site/users/view/CodeChief)
(@CodeChief)[#3200](https://nuget.codeplex.com/workitem/3200)
- 使用最新的 NuGet 2.4 和 2.5 組建中斷 MSTest
一直要求最多的功能之一,就是能夠覆寫 NuGet 套件中已存在於磁碟上的內容檔案。 從 NuGet 2.5 開始,系統會識別這些衝突,系統會提示您覆寫檔案,而先前一律會略過這些檔案。
'nuget.exe update' 和 'Install-Package' 現在都有新的選項 '-FileConflictAction' 來設定命令行案例的一些預設值。
當目標專案中已有來自封裝的檔案時,請設定預設動作。 設定為 [覆寫] 以一律覆寫檔案。 設定為 [忽略] 以略過檔案。 如果未指定,則會提示每個衝突的檔案。
NuGet 套件的最上層已建立新的傳統資料夾。 身為 、 \content
和 \tools
的對等互連\lib
,您現在可以在\build
套件中包含資料夾。 在這裡資料夾下,您可以放置兩個具有固定名稱的檔案, {packageid}.targets
或 {packageid}.props
。 這兩個檔案可以直接位於 build
或架構特定資料夾之下,就像其他資料夾一樣。 挑選最相符架構資料夾的規則與那些資料夾完全相同。
當 NuGet 安裝含有 \build 檔案的套件時,它會在指向 .targets
和 .props
檔案的項目檔中新增 MSBuild <Import>
元素。 檔案 .props
會新增在頂端,而 .targets
檔案會新增至底部。
在 2.5 之前,在 檔案中 .nuspec
,使用者只能指定要針對所有架構新增的參考檔案。 現在,在 2.5 中使用這項新功能,使用者可以為每個支援的平臺撰寫 <reference/>
元素,例如:
<references>
<group targetFramework="net45">
<reference file="a.dll" />
</group>
<group targetFramework="netcore45">
<reference file="b.dll" />
</group>
<group>
<reference file="c.dll" />
</group>
</references>
以下是 NuGet 如何根據檔案新增項目參考的 .nuspec
流程:
lib
尋找適合目標架構的資料夾,並從該資料夾取得元件清單- 個別尋找適用於目標架構的參考群組,並從該群組取得元件清單。 沒有指定目標架構的參考群組是後援群組。
- 尋找兩個清單的交集,並使用該交集做為要新增的參考
這項新功能可讓套件作者使用參考功能,將元件子集套用至不同的架構,否則它們需要將重複的元件裝載於多個 lib
資料夾中。
注意:您目前必須使用nuget.exe套件來使用此功能;NuGet 套件總管尚未支援它。
許多您都知道「Update-Package」PowerShell Cmdlet,以更新所有套件;現在還有一個簡單的方式可以透過UI來執行此動作。
若要試用這項功能:
- 建立新的 ASP.NET MVC 應用程式
- 啟動 [管理 NuGet 套件] 對話框
- 選取 [更新]
- 按兩下 [全部更新] 按鈕
現在nuget.exe pack 命令會使用下列規則來處理參考的專案:
- 如果參考的項目有對應的
.nuspec
檔案,例如,在與 相同的資料夾中proj1.csproj
有一個稱為proj1.nuspec
的檔案,則會使用從檔案讀取的標識碼和版本,將此專案新增為套件的.nuspec
相依性。 - 否則,參考項目的檔案會配套到封裝中。 然後,此專案所參考的專案會以遞歸方式使用相同規則來處理。
- 所有 DLL、
.pdb
、 和.exe
檔案都會新增。 - 會新增所有其他內容檔案。
- 所有相依性都會合併。
這可讓參考的專案在有檔案時被視為相依性,否則它會成為封裝的一 .nuspec
部分。
如需詳細資訊,請參閱: [http://nuget.codeplex.com/workitem/936](http://nuget.codeplex.com/workitem/936)
名為 『minClientVersion』 的新元數據屬性現在可以指出取用套件所需的最小 NuGet 用戶端版本。
這項功能可協助套件作者指定套件只能在特定版本的 NuGet 之後運作。 .nuspec
在 NuGet 2.5 之後新增新功能時,套件將能夠宣告最低 NuGet 版本。
<metadata minClientVersion="2.6">
如果使用者已安裝 NuGet 2.5,且套件識別為需要 2.6,則會向使用者提供視覺提示,指出套件無法安裝。 然後,系統會引導使用者更新其 NuGet 版本。
這會改善套件開始安裝但失敗的現有體驗,指出識別無法辨識的架構版本。
在 NuGet 2.5 之前,當安裝相依於專案中已安裝之套件的套件時,即使現有版本符合相依性,相依性也會更新為新安裝的一部分。
從 NuGet 2.5 開始,如果相依性版本已經滿足,相依性將不會在其他套件安裝期間更新。
案例:
- 來源存放庫包含 1.0.0 版和 1.0.2 版的套件 B。 它也包含套件 A,其相依於 B (>= 1.0.0)。
- 假設目前的專案已安裝套件 B 1.0.0 版。 現在您要安裝套件 A。
在 NuGet 2.2 和較舊版本中:
- 安裝套件 A 時,NuGet 會將 B 自動更新為 1.0.2,即使現有的 1.0.0 版已經滿足相依性版本條件約束,也就是 >= 1.0.0。
在 NuGet 2.5 和更新的中:
- NuGet 將不再更新 B,因為它偵測到現有的 1.0.0 版符合相依性版本條件約束。
如您變更的相關背景,請閱讀詳細 [work item](https://nuget.codeplex.com/workitem/1681)
與相關的 [discussion thread](https://nuget.codeplex.com/discussions/436712)
。
如果您要針對nuget.exe進行疑難解答,或只是好奇作業期間所做出的 HTTP 要求,『-verbosity detailed』 參數現在會輸出所有 HTTP 要求。
在 NuGet 2.5 之前,如果您嘗試根據 UNC 路徑或本機資料夾,將 'nuget.exe push' 執行至套件來源,推送將會失敗。 使用最近新增的階層式組態功能,nuget.exe需要以 UNC/資料夾來源或 HTTP 為基礎的 NuGet 資源庫為目標變得很常見。
從 NuGet 2.5 開始,如果nuget.exe識別 UNC/資料夾來源,它會執行檔案複製到來源。
下列命令現在可運作:
nuget push -source \\mycompany\repo\ mypackage.1.0.0.nupkg
nuget.exe存取組態的命令(除了 'spec' 和 'pack' 以外的所有命令現在都支援新的 '-ConfigFile' 選項,這會強制使用特定的組態檔取代 %AppData%\nuget\Nuget.Config 的默認組態檔。
範例:
nuget sources add -name test -source http://test -ConfigFile C:\test\.nuget\Nuget.Config
使用 NuGet 2.5 時,NuGet 工具現在適用於 Visual Studio 中的原生專案。 我們預期大部分的原生套件都會使用上述 MSBuild 匯入功能,並使用 CoApp 專案所建立的工具。 如需詳細資訊,請參閱 coapp.org 網站上的工具 詳細數據。
當套件安裝到原生專案時,會引進「原生」的目標架構名稱,以在 \build、\content 和 \tools 中包含檔案。 'lib' 資料夾不會用於原生專案。