NuGet 是 .NET 官方套件管理工具,也是開發人員都熟悉使用的工具。
我們可以利用架設私有 NuGet 伺服器的方式來對開發團隊的自有套件做管理,讓團隊成員可以有一致的套件存取體驗。

NuGet.Server 是 .NET Foundation 提供的套件,可用來建立私有 NuGet 伺服器以方便管理及發佈自有開發的套件。NuGet.Server 是輕量化的實作,並沒有提供網頁管理介面,只能透過命令列工具做套件管理。

本文針對私有伺服器的建置和設定、伺服器的套件管理及 Visual Studio 對伺服器的引用做說明。

建立 NuGet 伺服器應用程式

範例環境資訊:

  • Visual Studio 2017
  • .NET Framework 4.7.1

建立 Web Application

  1. [新增] > [專案] > [Web] > ASP.NET Web Application(.NET Framework)
  2. 選用 空白 專案範本。
    空白範本

安裝 NuGet.Server

使用 NuGet 安裝 NuGet.Server 套件。

  1. 以滑鼠右鍵按一下專案,選取 [管理 NuGet 套件]。
  2. 在套件管理員 UI 中選取 [瀏覽] 索引標籤,搜尋並安裝最新版的 “NuGet.Server” 套件。
    nuget.server

注意

  1. 最新版相依於 .NET Framework 4.6,如果是使用 .NET Framework 4.5.2 時,套件請選用 2.10.3 版。
  2. 如果專案不是 .NET Framework 4.6 時,可能會在 web.config 的 system.web 下多插入一個 <compilation debug="true" targetFramework="4.6" /> 導致錯誤,可以檢查一下是否有重覆的設定值。

也可以使用套件管理器主控台來安裝,使用以下命令:

Install-Package NuGet.Server

安裝後 web.config 的 appSettings 會增加一些設定值,預設的套件存放路徑為 ~/Packages 所以會新建一個 Packages 資料夾。

套件安裝好,就可以按 Ctrl + F5 測試一下。
OK

正確執行!

畫面中 Repository URLs 區域中的網址(如上例的 http://localhost:17240/nuget),即是後續要設定自有套件庫的來源網址。

設定 NuGet Server

NuGet.Server 會在 web.config 中加入一些設定值。重要的設定值如下:

API 安全性

  • requireApiKey
    設定推送或刪除套件是否需要 Api Key
  • apiKey
    推送或刪除套件時,用來驗證的 Key 值

如果是在內網使用沒安全疑慮下,可以將 requireApiKey 設定成 false,apiKey 保持空白以略過檢查。

當 requireApiKey 為 true 時,apiKey 省略或空白時,推送功能會被停用。

套件存放路徑

  • packagesPath
    可以是絕對或虛擬路徑,省略或留白時,預設值是 ~/Packages

隱藏而不刪除

delete 會直接刪除檔案,而 delist 會將檔案設為隱藏即從公開名單上除名。

nuget list 時會略過被 delist 的 package,但指定 package 版本做安裝 (nuget install packageid -version version) 可以正常取得檔案,減少版本的相依問題。

  • enableDelisting
    是否以 delist 取代 delete

套件管理

管理套件,要透過 nuget.exe 這個命令列公用程式。nuget.exe CLI 不會影響專案檔,也不會在安裝套件時更新 packages.config。

如果有安裝 Visual Studio,可能已設定好環境可直接使用,可打開命令視窗試執行 nuget 看看。

安裝 NuGet CLI

  1. 官網下載 nuget.exe,選建議版本即可 (recommended latest)。
  2. 需要 4.1.0 以上版本才能將套件發行至 nuget.org。
  3. 可加到系統的 PATH 環境變數中以方便叫用。

新增/刪除 套件

可以利用 nuget setApiKey 命令來將 apiKey 儲存在本機中,就不用在每次執行異動時都要帶入 apiKey 的參數值,命令如下:

1
nuget setApiKey [apiKey] -Source [nuget 套件庫的來源網址]

推送新套件,用以下命令:

1
nuget push [.nupkg 檔位置] [apiKey] -Source [nuget 套件庫的來源網址]

刪除 Server 上的套件,用以下命令:

1
nuget delete [套件 id] [套件版本號] [apiKey] -Source [nuget 套件庫的來源網址]

有先 nuget setApiKey 過,[apiKey] 就不用傳了。

使用私有 NuGet 伺服器

設定 Visual Studio 的 NuGet 來源

透過 VS 的 [套件管理員設定] 可以加入私有 NuGet 伺服器的引用。

  1. 點選 [工具] > [NuGet 封裝管理員] > [套件管理員設定]。
  2. 在左側 [NuGet 封裝管理員] 中,選擇 [套件來源]。
  3. 在 [可用套件來源] 中選擇 [加號+],在下方的名稱來源區輸入自定的 NuGet Server 名稱及來源網址 (如 http://localhost:17240/nuget),點選 [更新] 即完成設定。

使用新套件

打開 NuGet 封裝管理員(套件管理員),從右上方的 套件來源 選單中可選到我們新增的套件來源.

切換來源後,即可透過列表及搜尋找到套件來做安裝。

select source

參考資料及圖片來源

  1. NuGet.Server 專案
  2. NuGet.Server Microsoft docs 官方文件
  3. 官方 NuGet CLI 參考文件