使用 NuGet Package Explorer 建立 NuGet 套件

公司許多專案中有不少底層功能是可以共用的(ex. 資料庫相關操作、redis 相關操作、web request、….etc),原本都是使用 dll 參考,但這樣的方式有些缺點:1. 如果 dll 是放在共用資料庫供所有專案參考,就可能出現 A 專案需要更新 dll,但 B 專案沒有使用新 dll 的需求可以繼續延用舊 dll,但更新共用資料夾中的 dll 檔案時就會強迫所有專案一併更新,這可能造成其他專案因此出現問題 2. 如果各個專案自行管理 dll,雖然能解決無差別更新的問題,只是這樣一來就跟沒有共用一樣了

最後決定將共用的功能都包裝成 NuGet package 讓其他專案使用 NuGet 來加入參考,因為 NuGet 有版本的概念,可以避免無差別更新的狀況,各專案可以依實際狀況來進行版本升級

什麼是 NuGet Package Explorer

NuGet Package Explorer 可以讓我們簡單快速地建立 NuGet Package,也可以直接從磁碟或是 NuGet Server 開啟 NuGet Package metadata 檔案(.nupkg)

1npe

2newtonjson

3newtonjsondata

安裝 NuGet Package Explorer

  1. 使用 Chocolatey

    choco install nugetpackageexplorer

  2. 下載安裝檔 - 載點

    如果曾經安裝過 3.9 以前版本,需先移除才能再次安裝 (2017/07/12 最新版本為 3.23 )

建立 NuGet Package

  1. Create a mew package

    4createnewpackage

  2. 編輯 Package metadata

    5editmetatada

    27editmetadata

    • Id + Version 需要是 unique

    • 結果對應

      6metadatamapping

  3. Edit dependencies

    用來加入 NuGet 的相依關係

    7editdenpendencies

    • Add a new group

      8addagroup

    • Target framework 填上目標 .NET Framewrok

      9framewrok1

    • 按下任一個欄位 Target framework 會自動更新為正確名稱

      10framework2

    • Select dependency from NuGet feed

      11selecenuget

    • Add new dependency

      12addnewdenpendency

    • 加入成功

      13added

    • 安裝時會出現相依提示

      13-1denpendency

  4. Edit assembly references

    用來加入 dll 參考

加入資料夾及檔案

在 Package contents 區塊空白處按下滑鼠右鍵可以加入資料夾及檔案

14addfolder

資料夾用法請參考下表

FolderDescriptionAction upon package install
tools用來放 Powershell scripts 跟可以從 Package Manager Console 執行的程式內容會被複製到專案資料夾中,tools 資料夾會被加至 PATH環境變數
lib用來放 .dll,.xml,.pdb.dll 組件會直接被加入參考,.xml.pdb 會被複製至專案資料夾中
content用來放其他類型檔案標案會被複製至專案資料夾下
build用來放 MSBuild 的 .targets.props會自動將 MSBuild 行為加至 .csproj(NuGet 2.x) 或 project.lock.json (NuGet 3.x).
src原始碼發行位址(https://nuget.smbsrc.net/))與一般 nuget package 不同,一般安裝時不會動作
  • 依 lib 為例

    • 需要加入 lib 目標平台的資料夾

      15addnet

    • 在目標平台資料夾中加入 .dll.pdb

      16ADDFILE

      17addedfiles

分析 NuGet Package 設定是否正確

  1. NuGet Package Explorer 主選單 TOOLS –> Analyze Package

    18analyze

  2. 分析結果

    沒有出現 issue 就可以發行了

    19analyzed

發行 NuGet Package

  1. NuGet Package Explorer 主選單 FILE –> Publish…

    20publish

  2. 填入 Publish Url 及 Publish Key

    這邊以自建 NuGet Server 為例

    21published

Visual Studio 加入 NuGet Source

  1. Visual Studio 主選單 Tools –> Options

    22vsoption

  2. NuGet Package Manager –> Package Sources –> +

    23nuget

  3. 填入 Name 與 Source –> Upate

    24update

  4. 搜尋時調整 source

    25pkgsource

  5. 搜尋結果

    26result

心得

NuGet Package Explorer 是個簡便工具,用它來建立 NuGet Package 可以省下不少時間。當然也可以透過 NuGet CLI 來建立 NuGet Package,但使用 NuGet CLI 來建立 package 相對繁瑣許多,如果有興趣可以參考 Creating NuGet packages

之前建立 NuGet Package 時常常覺得設定很簡單,不用特別記,但幾次下來發現每次要建立時還是要找一下設定,回想一下該做什麼,不過跟 NuGet CLI 比還是方便不少,透過幾個簡單步驟就能擁有自己的 NuGet Package 了

參考資訊

  1. NuGetPackageExplorer/NuGetPackageExplorer
  2. Creating NuGet packages