文章目錄
自建 NuGet Server
自從 Visual Studio 2010 第一次使用 NuGet 後,開發生涯就此改變了,簡易的套件安裝及管理方式,讓開發人員不需要在自行保留需要的 dll,需要的 config 也可以透過 NuGet 安裝來加入,大幅地減少開發時繁瑣的工作
但有些公司的資安政策並不允許外部連線,這也造成 NuGet 無法使用,一般的解決方式就是透過共用網路資料夾來分享可能會用到的 dll,只是這樣的方式終究不如 NuGet 來得便利
最近的專案有些共用元件,原本都是透過 dll 參考,但常遇到 dll 有更新時,shared folder 中的 dll 檔案被更新,造成不需要使用新版 dll 的 module 也一併被迫使用新版 dll,無形中造成不少問題。所以打算利用自建內部 NuGet Server 來解決問題,因為 NuGet 不同版本可以共存,至少可以讓不需升級的 module 繼續使用舊版本,而不用被迫升級。
建立 Web Application
使用 Installed template 建立專案 –> ASP.NET Web Application(.NET Framework)
使用 Empty template
安裝 NuGet.Server
兩種方法擇一即可,安裝完成會異動到下列內容
- 加入
Default.aspx
- 加入
favicon.ico
- 新增
DataServices
資料夾並加入Packages.svc
與Routes.cs
- 新增
Packages
資料夾並加入Readme.txt
- 修改
{專案名稱}.csproj
- 修改
packages.config
- 修改
Web.config
Package Manager UI
專案 上按右鍵 –> Manage NuGet Packages…
Browse tab –> 搜尋
NuGet.Server
–> Install
Package Manager Console
Visual Studio 主選單 Tools –> NuGet Package Manager –> Package Manager Console
執行
Install-Package NuGet.Server
- 如果 ASP.NET Web Application 的 .NET Framework 是
4.5.2
, NuGet.Server 需安裝2.10.3
版本,最新版為 2.11.3
調整 web.config
requireApiKey
設定 push 或是 delete NuGet packages 是否需要 Api Key
apiKey
設定 Api Key ,如果 requireApiKey 是 true,這個值就一定得給,否則無法 push package
packagesPath
指定 package 儲存目錄,可以是虛擬或是實體目錄,預設是
~/Packages
allowOverrideExistingPackageOnPush
設定 packages 有相同
id + 版號
時是否允許覆蓋。預設是 false ,與 NuGet.org 相同 - 不允許覆蓋ignoreSymbolsPackages
設定是否忽略 symbols packages -
.symbols.nupkg
與 packages 中包含/src
資料夾的檔案都會被忽略 ,因為 NuGet.Server 沒有包含 symbol server 功能enableDelisting
設定是否以 delist 取代 delete
- delete 會直接刪除檔案
- delist 會將檔案設為隱藏,nuget list 時會略過被 delist 的 package,但指定 package 版本安裝時(nuget install packageid -version version)可以正常取得檔案,避免特定版本的相依出現問題
enableFrameworkFiltering
設定是否可以依 .NET Framework 來過濾 package
aspnet:UseHostHeaderForRequestUrl
如果是 NAT - Network Address Translation 網路環境才需啟用
成功安裝
提供加入 NuGet Source Url (供 Visual Studio 加入用)
http://localhost:15069/nuget
Push NuGet package 的 Url (發行 NuGet package 用)
nuget.exe push {package file} {apikey} -Source http://localhost:15069/api/v2/package
心得
安裝上很簡易,缺點是畫面醜醜的,但我們工程師在意的是功能,絕對不會因為畫面難看就嫌棄它的XD
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-26
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。