包创作最佳做法

本指南旨在为 NuGet 包作者提供轻量级引用,用于创建和发布高质量的包。 它主要侧重于特定于包的最佳做法,例如元数据和打包。 有关生成高质量库的更深入建议,请参阅 .NET 开源库指南

建议类型

每篇文章都提供了四种类型的建议: DoConsiderAvoidDo not。 推荐类型表示应该如何遵循。

你几乎应该始终遵循 Do 建议。 例如:

✔️ 请为您的包包含一个简短说明,用于描述其用途。

另一方面,考虑建议通常应遵循,但规则存在合法例外:

✔️ 请考虑选择具有符合 NuGet 前缀预留 条件的前缀的 NuGet 包名称。

避免 建议提及通常不是好主意的事情,但有时打破规则是有意义的:

❌ 避免需要确切版本的 NuGet 包引用。

最后,不要建议表示您几乎不应该做的事情。

❌ 请勿使用 LicenseUrl 元数据属性。

创建 NuGet 包

通过基于 SDK 风格的项目来创建 NuGet 包是最新推荐的方法。 SDK 样式的项目属性(包括 目标框架包元数据)在 项目文件中定义。

通过在 Visual Studiodotnet CLI 中定义必需属性并进行打包,来从 SDK 风格项目中创建包。

✔️ 使用 Visual Studio 或 dotnet CLI 创建 SDK 样式项目并创建包(打包)。

有关包创建(包括必要的客户端工具、项目文件示例和命令)的更详细指南,请参阅 使用 dotnet CLI 创建 NuGet 包

若要帮助确定要面向哪些 .NET 框架,请参阅有关 跨平台目标的最新指南

包元数据

元数据是任何 NuGet 包的基础组件。 元数据的质量可以极大地影响包的可发现性、可用性和可信度。

在 Visual Studio 中,指定包元数据的建议方法是转到 Project > [Project Name] 属性 > 包。

还可以 直接在项目文件中指定包元数据元素。

下面是表映射并描述可用的包元数据元素:

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 来检查包 ID 是否唯一且可区分,或者检查是否存在以下链接: https://www.nuget.org/packages/<包名称>。

✔️ 请考虑选择具有前缀的 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) <名称/公司><年份>”。

版权声明实质上表明,未经你许可,无法复制您的作品。 在程序包中包含版权声明很容易,不会造成任何损害!

示例:Copyright (c) Contoso 2020

项目 URL

✔️ 请包含指向关联项目、存储库或公司网站的链接。

项目网站应提供用户需要了解的所有有关包的信息,很可能会成为用户查找文档的主要地方。

图标

✔️ 请考虑在您的包裹中包含一个图标,以帮助视觉上将其区分开。 这是一个相对较小的补充,可以改善包装质量的感知。

图标可以特定于单个包,也可以是品牌徽标。

✔️ 请使用 128x128 的图像,并且具有透明背景(PNG),以获得最佳查看结果。

NuGet 会自动将图像缩放以适应客户端的显示。

❌ 请勿使用已弃用的 IconUrl 元数据属性。

自述文件

✔️ 请添加 README markdown 文件 ,其中概述了包的作用以及如何入门。

包自述文件将显著提高人们对包质量的感知,并且改善新用户入门体验。 在上传自述文件之前,还要考虑 预览自述文件 ! 有关详细信息,请参阅 如何在 NuGet 包中包含自述文件

存储库类型和 URL

✔️ 请考虑设置 源链接 以自动将源代码管理元数据添加到 NuGet 包,并使库更易于调试。

源链接会自动将 Repository URLRepository Type 添加到包元数据中。 它还会添加与软件包版本关联的特定的提交记录。

标记

✔️ 请包含多个标记,其中包含与包相关的关键术语,以提高可发现性。

标签被纳入考虑,在 NuGet.org 的搜索算法中,对于那些不在“包 ID”中但相关的术语尤其有用。

例如,如果我发布了一个将字符串输出到控制台的包,我将包括:“日志记录,日志,控制台,字符串,输出”

发行说明

✔️ 请包含每个更新的发行说明,描述所做更改的内容。

虽然发行说明不需要特定格式,但建议包括:

  1. 重大变化
  2. 新增功能
  3. 故障修复

如果已在存储库中跟踪发行说明或更改日志,还可以包含指向相关文件的链接。

许可

✔️ 请在 包中包含许可证表达式或许可证文件

重要

没有许可证的项目默认为 独占版权,这意味着你尚未授予任何人使用项目的权限。

❌ 请勿使用已弃用的 LicenseUrl 元数据属性。

当该 URL 上的许可证发生变更时,将会追溯更改早期包版本的显示许可证,这可能导致法律上的歧义。

如果包是 开放源代码

✔️ 请 选择一个开放源代码许可证 ,使包开放源代码。

“开源许可证是符合开放源代码定义的许可证,简言之,它们允许软件自由使用、修改和共享。 - 开放源代码计划。 若要了解有关开放源代码软件和开放源代码计划的详细信息,请查看 https://opensource.org/

✔️ 请考虑 在包中包含许可证表达式

许可证表达式被清晰地呈现出来,使消费者更明确地知道他们是否可以使用你的程序包或许可证是否已经更改。

注释

NuGet.org 仅接受开放源代码计划或免费软件基金会批准的许可证的许可证表达式。

如果包不是开放源代码

✔️ 请在 包中包含许可证文件

可以将任何许可证文件(.txt 或 .md)添加到包,包括非标准许可证。