[.NET] 製作你的 NuGet 元件

自從 NuGet 2.0 讓加入元件到 Visual Studio 專案變得超級簡單之後,很多來自微軟和第三方廠商的免費套件也都大量使用 NuGet 來作為 SDK 或可程式的元件的集中地,NuGet 也有提供 Server 版本讓企業內的開發團隊也能建置 NuGet 類型的服務,加速開發人員在整合參考元件的處理速度。

自從 NuGet 2.0 讓加入元件到 Visual Studio 專案變得超級簡單之後,很多來自微軟和第三方廠商的免費套件也都大量使用 NuGet 來作為 SDK 或可程式的元件的集中地,NuGet 也有提供 Server 版本讓企業內的開發團隊也能建置 NuGet 類型的服務,加速開發人員在整合參考元件的處理速度。架設自己的 NuGet Server 的作法己經有兩篇不錯的文章可以參考,我就不贅述了。

http://www.dotblogs.com.tw/wadehuang36/archive/2011/10/06/nuget-server.aspx

http://blog.darkthread.net/post-2011-05-27-nuget-server.aspx

我自己編寫的 EasyOAuth Framework 正在開發新的 v3.0 版本,為了要簡化開發人員加入這個元件的流程,我開始想說要把它加入到 NuGet Gallery 中,這樣只要在 Visual Studio 中使用 NuGet 管理員就能將元件加到專案內,不用再去 Codeplex 下載然後加入參考,而且也可以運用 Visual Studio 2012 (NuGet 2.0) 提供的遺失套件下載功能來簡化團隊開發的流程。

不過人總有第一次,在使用 NuGet 工具建立自己的 EasyOAuth Framework 套件前,總是要熟悉一下它怎麼做的,原本在 NuGet 文件中看到的都是指令的作法,後來在查一些參數時,看到了 Package Explorer 這個 GUI 工具,我就直接下載來玩玩看。Package Explorer 是一個 ClickOnce 的工具,只要下載它的 ClickOnce Installer 執行即可,啟動 Package Explorer 時,會先進入起始頁:

image

選擇 Open a local package,可以打開本地己經建好的 NuGet Package;選擇 Open a pacakge from online feed,可打開別人所定義的 NuGet Package,可以順便參考一下別人的 Package 是怎麼編寫的;選擇 Read NuGet documentation 可打開 NuGet Doc 的網站以閱讀文件;最後選擇 Create a new package 可建立新的 NuGet Package。

Package Explorer 是一套可以方便開發人員將自己的專案成果 (尤其是元件庫) 整合為 NuGet Package 的工具,它本身還是使用了既有的 Package Manifest 定義,再加入檔案管理和套件引用的功能。所以在建立 Package 前,先將自己的元件的資訊先整理好,再來設定 Package Manifest 即可,需要的資訊有:

  • 自己的元件的 DLL 路徑。
  • .NET Framework 的版本。
  • 參考的系統元件清單 (這個是指 .NET Framework 的組件)。
  • 參考的 NuGet 套件清單。
  • 必要的附屬資源 (如授權檔或是額外動作的指令檔)。

準備好以後,就可以按 Create a new package 來建立新的 Package Manifest,並且會顯示出編輯器的畫面。

image

按下 Package metadata 的編輯按鈕,可開啟 Package Manifest 的編輯器:

image

image

這裡的欄位基本上都會對應到 Package Manifest 的 XML 項目,可參考上圖的說明填寫。如果說要由 Visual Studio 的組件資訊加到 NuGet Package Manifest 時,可使用 NuGet 的指令方式匯入 (GUI 工具沒有這個功能)。其中的 Edit dependencies 可設定專案所引用的 NuGet 套件的參考資訊。

image

按下image時,會出現選擇套件的對話盒,在這裡可以搜尋 NuGet 套件並加入參考:

image

設定完元件的 Package Manifest 後,就可以在套件中加入內容了,以本文的例子而言,我們要加入元件的 DLL 執行檔到 Package 內,在 Package Content 按右鍵,可看到加入內容的快顯功能表:

image

其中,Lib 可放元件的 DLL 檔案與可執行檔,Content 可放元件的說明檔或其他內容檔 (例如 Web.config.transform),Tools 可放元件在加入系統時需要的初始化指令碼 (ex: PowerShell script),而 Src 可加入元件的原始碼。在本例中,我們要加入 Lib 資料夾,以準備加入 DLL 元件。加入後,在 Lib 上按右鍵,會看到不同平台版本的 .NET Framework 的新增清單,這裡就要看你的元件是使用哪一種 DLL 的版本來添加,而一個 NuGet 套件可同時包裝多個版本的 DLL,在本例中,我只需要加入 .NET Framework 4.5 的資料夾:

image

加入之後,Package Content 會出現 net45 資料夾,在它上面按右鍵:

image

選擇 Add Existing File,並且加入元件的 DLL,加入完成後會看起來像這樣:

image

這樣,一個簡單的 NuGet Package 就建立完成了,可以使用 TOOLS\Analyze Package 來分析 Package 有沒有問題:

image

如果分析出來是 0 issue ( s ) found,表示 Package 可以發行了。

image

最後,由 FILE\Publish,呼叫出發行對話盒:

image

如果是要發行到 NuGet 官方伺服器,請保留 https://nuget.org 即可,否則要輸入自己的 NuGet Server 的位址,然後輸入你的 NuGet 帳戶的 API Key (帳戶可到 NuGet 免費申請,即會得到一組 API Key),然後按 Publish 即可發行,發行完成後約數分鐘,即可在 NuGet Gallery 中看到你的 Package:

image

當然,也可以在 Visual Studio 2012 中使用管理 NuGet 套件功能找到這個組件:

image

 

Reference:

http://docs.nuget.org

http://nuget.codeplex.com

http://blog.davidebbo.com/2011/04/easy-way-to-publish-nuget-packages-with.html

http://www.dotblogs.com.tw/wadehuang36/archive/2011/10/06/nuget-package-explorer.aspx