使用 NuGet.Server 架設私有的 NuGet 伺服器
NuGet 是 .NET 官方套件管理工具,也是開發人員都熟悉使用的工具。
我們可以利用架設私有 NuGet 伺服器的方式來對開發團隊的自有套件做管理,讓團隊成員可以有一致的套件存取體驗。
NuGet.Server 是 .NET Foundation 提供的套件,可用來建立私有 NuGet 伺服器以方便管理及發佈自有開發的套件。NuGet.Server 是輕量化的實作,並沒有提供網頁管理介面,只能透過命令列工具做套件管理。
本文針對私有伺服器的建置和設定、伺服器的套件管理及 Visual Studio 對伺服器的引用做說明。
建立 NuGet 伺服器應用程式
範例環境資訊:
- Visual Studio 2017
- .NET Framework 4.7.1
建立 Web Application
- [新增] > [專案] > [Web] >
ASP.NET Web Application(.NET Framework)
。 - 選用
空白
專案範本。
安裝 NuGet.Server
使用 NuGet 安裝 NuGet.Server 套件。
- 以滑鼠右鍵按一下專案,選取 [管理 NuGet 套件]。
- 在套件管理員 UI 中選取 [瀏覽] 索引標籤,搜尋並安裝最新版的 “NuGet.Server” 套件。
注意
- 最新版相依於 .NET Framework 4.6,如果是使用 .NET Framework 4.5.2 時,套件請選用 2.10.3 版。
- 如果專案不是 .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 測試一下。
正確執行!
畫面中 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
- 到 官網下載 nuget.exe,選建議版本即可 (recommended latest)。
- 需要 4.1.0 以上版本才能將套件發行至 nuget.org。
- 可加到系統的 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 伺服器的引用。
- 點選 [工具] > [NuGet 封裝管理員] > [套件管理員設定]。
- 在左側 [NuGet 封裝管理員] 中,選擇 [套件來源]。
- 在 [可用套件來源] 中選擇 [加號+],在下方的名稱來源區輸入自定的 NuGet Server 名稱及來源網址 (如
http://localhost:17240/nuget
),點選 [更新] 即完成設定。
使用新套件
打開 NuGet 封裝管理員(套件管理員),從右上方的 套件來源
選單中可選到我們新增的套件來源.
切換來源後,即可透過列表及搜尋找到套件來做安裝。