如何以 .NET Core CLI 建立並上傳 NuGet 套件 ?
.NET Core 一樣使用 NuGet 管理 package,本文將使用 VS Code 與 .NET Core CLI 建立 package,並上傳到 NuGet server。
Version
macOS High Sierra 10.13.3
.NET Core 2.0.7
VS Code 1.23.1
建立 Class Library
1 | $ dotnet new classlib -o MyClassLib |
使用 dotnet new
建立 project。
- classlib:建立 class library 類型專案
- -o:
o
utput,建立在MyCalculator
目錄下
使用 VS Code 開啟專案
1 | $ code MyClassLib |
使用 code
執行 VS Code,後面接欲開啟的 目錄名稱
。
編輯 MyCalculator
MyCalculator.cs
1 | using System; |
建立 MyCalculator
class,有只有一個 Sum()
method。
新增 Package Metadata
MyClassLib.csproj
1 | <?xml version="1.0" encoding="utf-8"?> |
第 5 行
1 | <PackageId>OomusouCalculator</PackageId> |
每個 NuGet package 除了 .nupkg
外,另外還有 .nuspec
,用來描述 package 資訊與其所需的 dependency,而這些資訊都來自於 .csproj
。
- PackageId:Package 唯一識別的 id,若是要發佈到
nuget.org
,則必須是nuget.org
唯一;若是發佈到公司內部自己的 NuGet server,則必須是該 server 的唯一 - Version:套件版本編號
- Authors:套件作者
- Company:套件公司
- GeneratePackageOnBuild:當
dotnet build
時,自動執行dotnet pack
建立.nupkg
編譯同時建置 Package
1 | ~/MyProject $ dotnet build -c Release |
使用 dotnet build
編譯專案。
- -c:
c
onfiguration,預設dotnet build
是以Debug
模式編譯,若要以Release
編譯,需要搭配-c
參數
由於剛剛已經在
.csproj
增加GeneratePackageOnBuild
,所以只要dotnet build
就會一起產生.nupkg
獲得 API Key
NuGet Package 分兩種,一種是對外公開的 package,一種是公司內部用的 package,本文先討論公開的 NuGet package。
要發佈到 NuGet server,必須知道兩件事:
- API Key:相當於你個人資訊憑證
- NuGet server URL:NuGet server 位址
- 到
https://www.nuget.org
,這是公開 NuGet package 的集散地 - 以個人帳號 Sign in,將 Microsoft 帳號登入
- 右上角會顯示登入帳號
- 選擇
API Keys
- 按
Create
建立 API Key - Key Name:這是給自己識別的名字,代表某個 API Key
- Glob Patten:適用的 pattern,
*
代表適用所有 package
最後按 Create
建立 API Key。
- 建立新的 API Key 成功
- 按
Copy
將 API Key 複製到 clipboard
發佈 Package
1 | ~/MyProject/bin/Release $ dotnet nuget push OomusouCalculator.1.0.0.nupkg -k oy2mskdm2daf7i7wersaxtwvssc6oebutgtywbhljl5tcw -s https://api.nuget.org/v3/index.json |
使用 dotnet nuget push
發佈 NuGet package 到公開的 NuGet server。
- -k:將剛剛複製的 API Key 貼上
- -s:公開 NuGet server 的網址為
https://api.nuget.org/v3/index.json
API Key 請用自己的,上面的 API Key 只是
示意
用
- 將目錄切到
.nupkg
所在的bin/Release
目錄下 - 使用
dotnet nuget push
將.nupkg
上傳到公開的 NuGet server
常見的
dotnet nuget push
失敗,都在於PackageId
重複,請記得取一個不重複的
PackageId
Conclusion
- 上傳 NuGet package 到 NuGet server 已經變得非常簡單,在
dotnet build
已經順便dotnet pack
,配合dotnet nuget push
即可上傳到公開的 NuGet server
Reference
Microsoft Docs, Quickstart: Create and publish a package (dotnet CLI)