何謂 NuGet 套件
以前習慣會將共用的函式,包裝成 dll,再加入到其他專案中,但是 dll 的管理、分享方式相當容易出錯,其實,也可以選擇安裝 NuGet 套件。
微軟是這麼解釋 NuGet 的:
NuGet 套件就是副檔名為
.nupkg
的單一 ZIP 檔案,內含已編譯程式碼 (DLL)、其他與該程式碼相關的檔案,以及包含套件版本號碼這類資訊的描述性資訊清單。 擁有要共用之程式碼的開發人員會建立套件,並將它們發行至公用或私人主機。 套件取用者會從適當的主機取得那些套件、將它們新增至其專案,然後在其專案程式碼中呼叫套件的功能。 NuGet 本身接著會處理所有中間詳細資料。
整理一下重點:
- NuGet 是 封裝 dll 等相關檔案的 ZIP 檔
- NuGet 訊息包含版本號碼、發布者等資訊
- NuGet 套件可發行至公用或私人主機上,供其他專案使用
以常用的 JSON 序列化/反序列化套件 - Newtonsoft.Json 為例:
在專案中引用套件之後,會自動追蹤版本狀態;我們可以直接在專案中發現版本更新狀態,進而更新,相當方便!
最近在處理專案升級至 .Net Core 3.1 的過程中,發現有個久遠未維護的套件僅支援到 .Net Framework,所以要來幫套件改版升級!
NuGet 套件建立方法有:
- dotnet CLI
- nuget.exe CLI
- MSBuild
在 Visual Studio 中根據 .nuspec 建立 NuGet 套件
在 Package Manager Console 中測試看看 NuGet 指令,如果出現以下錯誤訊息,表示因缺少套件而無法識別此指令:
NuGet : The term 'NuGet' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
需先安裝 NuGet.CommandLine 套件;在 Package Manager Console 中輸入以下指令:
Install-Package NuGet.CommandLine
NuGet 會自動加上專案的各項設定;接下來指定 .nuspec 檔案來建立 NuGet 套件:
NuGet pack {PorjectName}.nuspec -IncludeReferencedProjects -properties Configuration=Release
在 Visual Studio 中根據 .csproj 建立 NuGet 套件
很遺憾的,NuGet pack 指令無法根據 .csproj 正確的建立套件,會出現以下錯誤訊息:
NuGet : Error NU5012: 找不到 'bin\Release\{PorjectName}\bin\Release\'。確定已建置專案。
(修正進度請見 GitHub)
所以,如果要根據專案檔建立 NuGet 套件,請使用
NuGet pack {PorjectName}.nuspec -IncludeReferencedProjects -properties Configuration=Release
以上!
參考文件:
1. 使用 nuget.exe CLI 建立套件 https://docs.microsoft.com/zh-tw/nuget/create-packages/creating-a-package
2. NuGet 簡介 https://docs.microsoft.com/zh-tw/nuget/what-is-nuget
以上內容希望對各位有幫助
有任何建議歡迎留言 📝