NuGet - 建立簡單的內部 NuGet Server

每位 .NET 愛好者一定知道 NuGet 是一個超棒的套件管理工具,只要關鍵字下去,然後挑到喜歡的 Package,裝起來就 OK 了。但在內部開發的時候,我也想要把開發完的共用模組利用 NuGet 的方式分享給同事,其實不需要建立 NuGet Server,只需要用到 Share Folder 就可以達成了,今天限量就要來快速建立一個內部使用的 NuGet Server。


首先,我們要打包分享的模組,要打包的東西不外乎就是 dll 檔跟一些模組必要的其他檔案(例如:json 或 xml 設定檔),這些東西就先把專案用 Release 的組態 Build 出來(畢竟是要給其他人用的東西),接著就要來看看如何打包成 NuGet Package。

1. 先下載 NuGet Package Explorer (用 GUI 打包比較快速),開啟選擇 [Create a new package]



2. 填寫這個 Package 的資訊(粗體字代表是必填欄位)。



下表為這些欄位的敘述:


名稱
描述
Id
Package ID。為唯一值。
Version
Package 版本。格式可參考NuGet Dependency Versions
Title
標題。如果沒有設定就會同Id值。
Authors
作者。若有多位則用逗號分隔。
Owners
所有者。與 Authors 相同,可能是組織。
Icon Url
Package Icon 位置。
Project Url
Package Project 位置。通常是 GitHub 或介紹此 Package 的網站。
License Url
Package License 位置。
Summary
摘要。會顯示在 Package下方。
Description
描述。點選 Package 時會顯示在預覽視窗。
Release Notes
註解。在每次的版本釋出時,註明這次釋出的說明。
Copyright
版權。
Language
Package 語言。例如:zh-tw, en-US…
Tags
標籤。標註 Package 的分類,方便搜尋。

3. 加入其他關連的 Package 或 Assembly。
這邊比較麻煩,必須要去確認 Package 專案參考了那些 dll 與那些 NuGet Package

加入相依的 dll
3-1. 下拉 Assembly Name 欄位的值,選擇參考到的 .Net Framework dll。
3-2. 點選 [+] 加入。

加入相依的 NuGet Package
3-1. 按下 [Edit dependencies] 打開 Package Dependency Editor。
3-2. 按下 [+] 加入目標 Framework 設定。
3-3. 輸入目標 Framework (例如:net461 代表 .Net Framework 4.6.1)。
3-4. 按下方按紐打開 NuGet Package 清單,搜尋並選擇專案參考到的 NuGet Package 加入就完成了。




4. 在 Package Content 視窗按 [右鍵] 加入Package 相關內容檔案:


Package 可加入的資料夾種類可分為 5 種:

名稱
描述
Content
一般檔案,例如XML, JSON…等。檔案會被複製到根目錄下。
lib
放置所有要被參考的.dll檔。
tools
放置一些在安裝過程中會執行PowerShell Script檔案(.ps1)
build
放置客製化MSBuild的檔案(.props, .targets)
src
放置Source Code檔案(.cs)

可以在 lib 資料夾內加入各種不同目標 Framework 版本的資料夾,裏頭放置各版本 Build 出來的 dll 與相關檔案。




建立好了就儲存起來,你會在儲存的目錄下看到 .nupkg 檔。

5. 開一個 Share Folder,將 .nupkg 檔丟到 Share Folder 裡面就完成了。
(注意:Share Folder 要設定權限,不然其他人會抓不到)




加入完成後我們來看看能不能抓的到 Package。

1. 打開 Visual Studio => [Tools] => [Options] => [NuGet Package Manager] => [Package Source]

2. 加入剛剛建立的 Share Folder 位置。



3. 馬上關鍵字搜尋 NuGet Package,記得下拉 Package Source 搜尋比較快。






.Net Framework 建立 NuGet Package 的方式是像上面那樣比較麻煩的,但如果你的專案是 .Net Core 的話那真的會省很多工,因為 .Net Core 的精神就是以 NuGet Package 拼裝達到最輕量化的架構,所以 .Net Core 的 Class Library 有提供快速打包的功能:
限量用的是 Visual Studio 2017,不確定 Visual Studio 2015 裝 .Net Core 有沒有這功能

1. 在 .Net Core 專案按下 [右鍵] => 選擇 [Publish]



2. 選擇 Share Folder 的位置後按下 [Publish] 就完成了。





學會了這招,在搭配程式模組化,其實開發程式就省了蠻多時間了。如果想要把程式貢獻給社會的話再來建真正的 NuGet Server 吧。



參考來源
Microsoft Docs - NuGet









留言