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 參考文件