[HowTo] 如何從 Visual Studio 專案產生 NuGet 套件

阿蘇卡
4 min readAug 30, 2021

--

何謂 NuGet 套件

以前習慣會將共用的函式,包裝成 dll,再加入到其他專案中,但是 dll 的管理、分享方式相當容易出錯,其實,也可以選擇安裝 NuGet 套件。

微軟是這麼解釋 NuGet 的:

NuGet 套件就是副檔名為 .nupkg 的單一 ZIP 檔案,內含已編譯程式碼 (DLL)、其他與該程式碼相關的檔案,以及包含套件版本號碼這類資訊的描述性資訊清單。 擁有要共用之程式碼的開發人員會建立套件,並將它們發行至公用或私人主機。 套件取用者會從適當的主機取得那些套件、將它們新增至其專案,然後在其專案程式碼中呼叫套件的功能。 NuGet 本身接著會處理所有中間詳細資料。

整理一下重點:

  1. NuGet 是 封裝 dll 等相關檔案的 ZIP 檔
  2. NuGet 訊息包含版本號碼、發布者等資訊
  3. NuGet 套件可發行至公用或私人主機上,供其他專案使用

以常用的 JSON 序列化/反序列化套件 - Newtonsoft.Json 為例:

在專案中引用套件之後,會自動追蹤版本狀態;我們可以直接在專案中發現版本更新狀態,進而更新,相當方便!

最近在處理專案升級至 .Net Core 3.1 的過程中,發現有個久遠未維護的套件僅支援到 .Net Framework,所以要來幫套件改版升級!

NuGet 套件建立方法有:

  1. dotnet CLI
  2. nuget.exe CLI
  3. 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

以上內容希望對各位有幫助
有任何建議歡迎留言 📝

--

--

阿蘇卡
阿蘇卡

Written by 阿蘇卡

後端工程師。記錄下自己開發路上踩過的坑、研究過後的心得,希望對自己好,對其他工程師也好~