共用方式為


套件撰寫最佳做法

本指南旨在為 NuGet 套件作者提供輕量型參考,以建立和發佈高品質的套件。 它將主要著重於特定於套件的最佳實踐,例如元資料和封裝。 如需建置高品質程式庫的更深入建議,請參閱 .NET 開放原始碼程式庫指引

推薦類型

每篇文章都提出了四種類型的建議:做、考慮避免不做。 建議的類型表示應遵循的嚴格程度。

您幾乎總是應該遵循 Do 的建議。 例如:

✔️ 請務必為您的包裹提供簡短的描述,以描述其用途。

另一方面,通常應遵循 考慮 建議,但該規則也有合理的例外:

✔️ 請考慮選擇滿足 NuGet 前置字詞保留準則的 NuGet 套件名稱。

避免 的建議標註那些通常不被認為是好主意的行為,但有時破例可能是合理的:

❌ 避免使用需要確切版本的 NuGet 套件引用。

最後,請勿 類的建議表明您幾乎不該做的事情:

❌ 請勿使用 LicenseUrl metadata屬性。

建立 NuGet 套件

建立 NuGet 套件的最新建議方式是透過 SDK 樣式專案。 SDK 樣式的專案屬性,包括 目標架構套件中繼資料,會在 專案檔中定義。

Visual Studiodotnet CLI 中定義必要的屬性並封裝,從 SDK 樣式專案建立套件。

✔️ 請建立 SDK 樣式專案,並使用 Visual Studio 或 dotnet CLI 建立 (封裝) 套件。

如需套件建立的詳細資訊指引,包括必要的用戶端工具、專案檔案範例和命令,請參閱 使用 dotnet CLI 建立 NuGet 套件

若要協助決定要以哪些 .NET 架構為目標,請參閱我們 跨平台目標的最新指引

套件中繼資料

中繼資料是任何 NuGet 套件的基本元件。 元資料的品質會極大地影響套件的可發現性、可用性和可信度。

在 Visual Studio 中,指定套件中繼資料的建議方式是移至 [專案 > [專案名稱] 屬性 > 套件。

套件中繼資料元素也可以 直接在專案檔中指定

以下是對應和說明可用的套件中繼資料元素的表格:

Visual Studio 屬性名稱 專案檔案/MSBuild 屬性名稱 Nuspec 屬性名稱 Description
Package id PackageId id 套件名稱或識別碼。
Package version PackageVersion version NuGet 套件版本。
Authors Authors authors 以逗號分隔的套件作者清單,通常使用個人或組織的「易讀名稱」。
Description Description description 套件說明。
Copyright Copyright copyright 套件的著作權詳細資料。
Project URL PackageProjectUrl projectUrl 專案首頁的 URL。
Icon File PackageIcon icon 套件圖示影像檔案的路徑。
README PackageReadmeFile readme 套件 README markdown 檔案的路徑。
Repository URL RepositoryUrl repository url 建置套件之存放庫的URL。
Repository type RepositoryType repository type 存放庫 URL 指向的存放庫類型(即「git」)。
Tags PackageTags tags 描述套件的標籤和關鍵字的空格分隔清單。 搜尋套件時會使用標籤。
Release notes PackageReleaseNotes releaseNotes 此套件版本中所做的變更的說明。
Licensing - Expression PackageLicenseExpression license type="expression" SPDX 授權運算式。
Licensing - File PackageLicenseFile license type="file" 自訂授權檔案的路徑。

封裝識別碼

發佈全新的套件時,請按以下步驟:

✔️ 請務必選擇唯一且與 NuGet.org 上現有套件明顯區分開來的套件 ID。

您可以在 NuGet.org 上搜尋 ID 或檢查下列連結是否存在 https://www.nuget.org/packages/<,以檢查套件 ID 是否唯一且可區分:套件名稱>。

✔️ 請考慮選擇符合 NuGet 前綴保留準則的 NuGet 套件名稱。

保留套件的前綴 ID,可讓您獲得已驗證的勾選標記:影像

請參閱 套件 ID 前綴詞保留文檔 以了解更多。

套件版本

✔️ 請考慮使用 SemVer 來控制 NuGet 套件的版本。

本質上,這意味著使用 Major.Minor.Patch[-prerelease] 格式。

✔️ 如果套件不穩定或預覽,請將套件發佈為 發行前 套件。

如需更進階的指引,請參閱 .NET 程式庫版本設定指南

作者

✔️ 請將作者欄位用於您或您組織的「漂亮名稱」。

例如,如果我的 NuGet.org 使用者名稱是「jdoe」,那麼在作者欄位中使用「Jane Doe」可能會幫助消費者將我識別為作者。 如果我組織的 NuGet.org 使用者名稱是 「ContosoToolkit」,則使用 「Contoso Corporation」 可能會更容易辨識,並激發更多消費者信任。

Description

✔️ 請包含簡短的描述(最多 4000 個字元)來描述您的套件。

套件描述是 NuGet 搜尋中最突出的欄位之一,而且可能是潛在消費者首先查看的內容,以判斷套件是否適合他們。

✔️ 請在您的包裹中添加帶有“版權 (c) <名稱/公司><年份>”的版權聲明。

版權聲明本質上表明未經您的許可不得複製您的作品。 在您的包裹中包含版權聲明很容易,不會造成任何傷害!

範例:版權所有 (c) Contoso 2020

專案網址

✔️ 請包含關聯專案、儲存庫或公司網站的連結。

您的專案網站應該包含使用者需要知道的所有套件資訊,並且可能是使用者尋找文件的首選資源。

Icon

✔️ 考慮 在您的包裝中包含一個圖標 ,以幫助在視覺上區分它。 這是一個相對較小的補充,可以提高對包裝品質的感知。

圖示可以是個別套件特定的,也可以是品牌標誌。

✔️ 請務必使用 128x128 且具有透明背景 (PNG) 的影像,以獲得最佳檢視效果。

NuGet 會自動調整影像大小以符合其顯示於的客戶端。

❌ 請勿使用已棄用的 IconUrl 中繼資料屬性。

說明文件

✔️ 請 新增 README Markdown 檔案 ,以概述套件的功能以及如何開始使用。

套件 README 將顯著改善套件的品質感知以及新使用者入職。 此外,請考慮在上傳 README 之前預覽它 ! 如需詳細資訊,請參閱 如何在 NuGet 套件中包含 README 檔案

存放庫類型和 URL

✔️ 請考慮設定 原始檔連結 ,以自動將原始檔控制中繼資料新增至 NuGet 套件,並讓您的程式庫更容易偵錯。

來源連結會自動將 Repository URLRepository Type 新增至套件中繼資料。 它還會新增與您的套件版本相關的特定提交。

Tags

✔️ 請包含數個標籤,其中包含與您的套件相關的關鍵術語,以增強可探索性。

NuGet.org 的搜尋演算法會考慮標籤,而且對於不在套件識別碼中但相關的字詞特別有用。

例如,如果我發佈了一個套件來將字串日誌記錄到控制台,我會包含:「記錄,log,控制台,字串,輸出」

發布說明

✔️ 請務必在每次更新中包含版本說明,描述所做的更改。

雖然發行說明沒有特定格式要求,但我們建議包含:

  1. 重大突破性變更
  2. 新功能
  3. 錯誤修正

如果您已經在儲存庫中追蹤發行說明或變更日誌,您也可以包含相關檔案的連結。

Licensing

✔️ 請在 套件中包含授權運算式或授權檔案

這很重要

沒有許可證的項目默認為 獨家版權,這意味著您沒有授予任何人使用您的項目的權限。

❌ 請勿使用已棄用的 LicenseUrl 中繼資料屬性。

這在法律上存在歧義,因為 URL 上的授權變更會追溯變更先前套件版本的顯示授權。

如果您的套件是開源

✔️ 請 選擇開源許可證 來使您的軟件包開源。

“開源許可證是符合開源定義的許可證——簡而言之,它們允許軟件自由使用、修改和共享。” - 開源計劃。 要了解有關開源軟件和開源計劃的更多信息,請查看 https://opensource.org/

✔️ 請考慮在 套件中包含授權聲明

授權條款表達得最清楚,讓使用者更容易了解他們是否可以使用您的套件,以及授權是否已經變更。

備註

NuGet.org 只接受由開放原始碼倡議或自由軟體基金會核准的授權的授權表達式。

如果您的套件不是開放原始碼

✔️ 請在 套件中包含授權檔案

任何授權檔案 (.txt 或 .md) 都可以新增至套件,包括非標準授權。