系統規模較大或模組較多時,並不適合用專案相依,避免編譯太久及程式碼管理的問題等。
常見的方式是將 DLL 編譯出來,再給需要的專案參考,但同步 DLL 的過程需要控管,以免拿錯版本。
比較好的方式是透過 Dependency Service 解決專案相依的問題,而 .NET 的 Dependency Service 主要是 NuGet。
本篇介紹如何透過 ProGet 架設內部 NuGet Server。
前言
ProGet 是一套支援多種 Dependency Service 工具,它支援以下 Feed 服務:
- Bower
- Chocolatey
- Docker
- Maven
- npm
- NuGet (本篇重點)
- PowerShell
- Ruby Gems
- Universal
- VSIX
並且有 Windows 版本及 Linux(Docker) 版本可以架設,本篇重點將以 Windows 版本架設為主。
ProGet 有分付費版跟免費版,免費版支援的 Feed 跟付費版一樣,功能也沒被閹割太多,詳細差異可以看 Features by Edition。如果是要公司內部自用就放心的架吧!
安裝 ProGet
先下載 ProGet 安裝檔:下載
安裝步驟如下:
選擇版本,我直接選免費版,要試用企業版的人,也可以選企業版:
輸入註冊資訊(必填):
安裝路徑:
選擇 SQL Server 位置:
如果沒有 SQL Server,選第一個
New Instance of SQL Express
,它會自動幫你下載 SQL Express 及安裝。如果已經有現成的 SQL Server 可以用,先建立好一個名稱為
ProGet
的資料庫,並給它資料庫的連線字串。
選擇 Web Server,我在這邊是把 ProGet 架在 IIS 上面,如果沒有安裝 IIS 可以選擇有 Windows Service 的方式運行 ProGet:
設定 ProGet Server 運行的權限:
設定完成開始安裝:
新增 NuGet Feed
安裝好後用瀏覽器開啟 ProGet 用 Admin 登入,打開 Feeds 頁面,選擇 Create New Feed
:
Admin 預設帳號密碼都是 Admin。
例如:安裝在本機 Prot 81 的話,開啟 URL 就是http://localhost:81
。
Feed Type 選擇 NuGet Feed,Feed Name 自訂:
NuGet Feed 新增完成:
NuGet Feed 新增完成後,就可以透過 NuGet Push 指令把 NuGet Package 上傳到 ProGet 囉~
NuGet Package
在 Feeds 清單中,點進剛剛建立的 Feed,選擇 Add Package
,就可以看到上傳 NuGet Package 的方式。
如下:
API endpoint URL 就是 NuGet Feed 的 URL,可以透過這個 URL 上傳或下載 NuGet Package。
ProGet 有提供四種上傳 NuGet Package 的方式:
- 從頁面上傳
*.nupkg
- 透過 NuGet Push 指令上傳
- 從其他 NuGet Server 同步過來
- 從實體路徑載入
本篇以 NuGet Push 指令為主,
NuGet.exe
可以到 NuGet 官網下載。
打包
假設要打包 SampleLibrary 的專案,先用 Visual Studio 或 MSBuild 建置,建置完成後就可以透過 NuGet pack 指令打包 *.nupkg
檔案。指令如下:
1 | NuGet.exe pack C:\SampleLibrary\SampleLibrary.csproj -Version 1.0.0.1 -Properties "Configuration=Release;OutDir=C:\SampleLibrary\SampleLibrary\bin\Release" |
Version
:要上傳到 NuGet Server 的版本不能重複。OutDir
:編譯後 DLL 的位置。
如果是 .NET Core 專案,用
dotnet pack
指令打包,參數可以參考官網。
上傳
用 NuGet pack 打包完成後,就可以把 *.nupkg
上傳到 NuGet Server。
指令如下:
1 | NuGet.exe push SampleLibrary.1.0.0.1.nupkg -ApiKey Admin:Admin -Source http://localhost:81/nuget/internal/ |
ApiKey
:預設可以用 ProGet 的帳號密碼當做 NuGet ApiKey,從 ProGet 的管理中也能設定專用的 ApiKey,有興趣的可以研究看看。
在 NuGet 管理中新增 NuGet Feed,如下:
上傳完成就可以在 NuGet 管理中,看到自製的 NuGet Package 了。