建立 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 類型專案
  • -oo utput,建立在 MyCalculator 目錄下

nuget000

使用 VS Code 開啟專案


1
$ code MyClassLib

使用 code 執行 VS Code,後面接欲開啟的 目錄名稱

nuget001

編輯 MyCalculator


MyCalculator.cs

1
2
3
4
5
6
7
8
9
10
11
12
using System;

namespace MyClassLib
{
public class MyCalculator
{
public int Sum(int x, int y)
{

return x + y;
}
}
}

建立 MyCalculator class,有只有一個 Sum() method。

nuget002

新增 Package Metadata


MyClassLib.csproj

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>OomusouCalculator</PackageId>
<Version>1.0.0</Version>
<Authors>Oomusou</Authors>
<Company>Oomusou</Company>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<ItemGroup>
<Content Include="MyCalculator.cs" />
</ItemGroup>
</Project>

第 5 行

1
2
3
4
5
<PackageId>OomusouCalculator</PackageId>
<Version>1.0.0</Version>
<Authors>Oomusou</Authors>
<Company>Oomusou</Company>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

每個 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

nuget003

編譯同時建置 Package


1
~/MyProject $ dotnet build -c Release

使用 dotnet build 編譯專案。

  • -cc onfiguration,預設 dotnet build 是以 Debug 模式編譯,若要以 Release 編譯,需要搭配 -c 參數

由於剛剛已經在 .csproj 增加 GeneratePackageOnBuild,所以只要 dotnet build 就會一起產生 .nupkg

nuget004

獲得 API Key


NuGet Package 分兩種,一種是對外公開的 package,一種是公司內部用的 package,本文先討論公開的 NuGet package。

要發佈到 NuGet server,必須知道兩件事:

  1. API Key:相當於你個人資訊憑證
  2. NuGet server URL:NuGet server 位址

nuget005

  1. https://www.nuget.org,這是公開 NuGet package 的集散地
  2. 以個人帳號 Sign in,將 Microsoft 帳號登入

nuget006

  1. 右上角會顯示登入帳號
  2. 選擇 API Keys

nuget007

  1. Create 建立 API Key
  2. Key Name:這是給自己識別的名字,代表某個 API Key
  3. Glob Patten:適用的 pattern,* 代表適用所有 package

最後按 Create 建立 API Key。

nuget008

  1. 建立新的 API Key 成功
  2. 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 只是 示意

nuget009

  1. 將目錄切到 .nupkg 所在的 bin/Release 目錄下
  2. 使用 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)

2018-05-24