快速入门:使用 dotnet CLI 创建和发布包

本快速入门介绍如何使用 .NET 命令行接口或 dotnet CLI 从 .NET 类库快速创建 NuGet 包并将其发布到 nuget.org。

先决条件

  • 提供 dotnet 命令行工具的 .NET SDK。 从 Visual Studio 2017 开始,dotnet CLI 会自动安装任何与 .NET 或 .NET Core 相关的工作负载。

  • nuget.org 上的免费帐户。按照 添加新的个人帐户中的说明进行操作。

创建类库项目

可以将现有 .NET 类库项目用于要打包的代码,或创建一个简单的项目,如下所示:

  1. 创建名为 AppLogger 的文件夹
  2. 打开命令提示符并切换到 AppLogger 文件夹。 本快速入门中的所有 dotnet CLI 命令默认在当前文件夹上运行。
  3. 输入 dotnet new classlib,这将创建具有当前文件夹名称的项目。

有关详细信息,请查看 dotnet new

将包元数据添加到项目文件

每个 NuGet 包都有一个清单,用于描述包的内容和依赖项。 在最终的包中,清单是一个 .nuspec 文件,它使用项目文件中包含的 NuGet 元数据属性。

打开 .csproj.fproj.vbproj 项目文件,并在现有 <PropertyGroup> 标记中添加以下属性。 对名称和公司使用你自己的值,并将包标识符替换为唯一值。

<PackageId>Contoso.08.28.22.001.Test</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>

重要

包标识符在 nuget.org 和其他包源中必须是唯一的。 发布使包公开可见,因此,如果使用示例 AppLogger 库或其他测试库,请使用包含 SampleTest的唯一名称。

可以添加 NuGet 元数据属性中所述的任何可选属性。

注意

对于为公共使用而生成的包,请 PackageTags 特别注意 属性。 标记可帮助其他人查找你的包并了解其用途。

运行 pack 命令

若要从项目生成 NuGet 包或 .nupkg 文件,请运行 dotnet pack 命令,该命令也会自动生成项目。

dotnet pack

输出显示 .nupkg 文件的路径:

MSBuild version 17.3.0+92e077650 for .NET
  Determining projects to restore...
  Restored C:\Users\myname\source\repos\AppLogger\AppLogger.csproj (in 64 ms).
  AppLogger -> C:\Users\myname\source\repos\AppLogger\bin\Debug\net6.0\AppLogger.dll
  Successfully created package 'C:\Users\myname\source\repos\AppLogger\bin\Debug\Contoso.08.28.22.001.Test.1.0.0.nupkg'.

在生成期间自动生成包

若要在运行 时自动运行 dotnet packdotnet build,请将以下行添加到 中的 <PropertyGroup>项目文件:

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

发布包

使用 dotnet nuget push 命令和从 nuget.org 获取的 API 密钥,将 .nupkg 文件发布到 nuget.org。

注意

  • Nuget.org 会扫描所有上传的包中的病毒,并在发现任何病毒时拒绝这些包。 Nuget.org 还会定期扫描所有现有列出的包。

  • 发布到 nuget.org 的包对其他开发人员公开可见,除非将其取消列出。 若要私下托管包,请参阅 托管自己的 NuGet 源

获取 API 密钥

  1. 登录到 nuget.org 帐户 ,或者 创建一个帐户 (如果还没有帐户)。

  2. 选择右上角的用户名,然后选择“ API 密钥”。

  3. 选择“ 创建”,并提供密钥的名称。

  4. “选择范围”下,选择“ 推送”。

  5. “选择包>Glob 模式”下,输入*。

  6. 选择“创建”。

  7. 选择“ 复制 ”以复制新密钥。

    显示包含“复制”链接的新 API 密钥的屏幕截图。

重要

  • 始终将 API 密钥保密。 API 密钥类似于密码,允许任何人代表你管理包。 如果意外泄露了 API 密钥,请删除或重新生成该密钥。
  • 将密钥保存在安全位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以对其进行复制。 如果你不再希望推送包,还可以删除 API 密钥。

通过范围确定 ,可以创建用于不同用途的单独 API 密钥。 每个密钥都有一个过期时间范围,你可以将密钥的范围限定为特定的包或 glob 模式。 还将每个密钥的范围限定为特定操作:推送新包和包版本、仅推送新包版本或取消列出。

通过确定范围,可以为管理组织包的不同人员创建 API 密钥,以便他们仅拥有所需的权限。

有关详细信息,请参阅范围内的 API 密钥

用 dotnet nuget push 发布

从包含 .nupkg 文件的文件夹运行以下命令。 指定 .nupkg 文件名,并将密钥值替换为 API 密钥。

dotnet nuget push Contoso.08.28.22.001.Test.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json

输出显示发布过程的结果:

Pushing Contoso.08.28.22.001.Test.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
warn : All published packages should have license information specified. Learn more: https://aka.ms/nuget/authoring-best-practices#licensing.
  Created https://www.nuget.org/api/v2/package/ 1221ms
Your package was pushed.

有关详细信息,请参阅 dotnet nuget push

注意

如果要避免测试包在 nuget.org 上处于活动状态,可以推送到 位于 https://int.nugettest.org的 nuget.org 测试站点。请注意,上载到 int.nugettest.org 的包可能不会保留。

发布错误

push 命令中的错误通常表示存在问题。 例如,你可能忘记了更新项目中的版本号,因此尝试发布已存在的包。

如果 API 密钥无效或已过期,或者尝试使用主机上已存在的标识符发布包,也会出现错误。 例如,假设标识符 AppLogger-test 已存在于 nuget.org 上。如果尝试发布具有该标识符的包,该 push 命令会发出以下错误:

Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

如果收到此错误,请检查是否使用的是未过期的有效 API 密钥。 如果是,则错误指示主机上已存在包标识符。 若要修复此错误,请将包标识符更改为唯一,重新生成项目,重新创建 .nupkg 文件,然后重试命令 push

管理已发布的包

成功发布包后,你会收到一封确认电子邮件。 若要查看刚刚发布的包, 请在 nuget.org 上选择右上角的用户名,然后选择“ 管理包”。

注意

可能需要一段时间才能为包编制索引并显示在搜索结果中,其他人可以在其中找到它。 在此期间,包将显示在 “未列出的包”下,包页显示以下消息:

显示将包上传到 nuget.org 时显示的发布消息的屏幕截图。

现已发布 NuGet 包,以 nuget.org 其他开发人员可在其项目中使用。

如果创建的包 (没有用,例如此示例包是使用空类库) 创建的,或者你决定不希望该包可见,则可以 取消列出 包以在搜索结果中隐藏它:

  1. 在包显示在“管理包”页上的“已发布包”下后,选择包列表旁边的铅笔图标。

    显示 nuget.org 上包列表的“编辑”图标的屏幕截图。

  2. 在下一页上,选择“ 列表”,取消选中“ 在搜索结果中列出 ”复选框,然后选择“ 保存”。

    显示清除 nuget.org 上包的“列表”复选框的屏幕截图。

包现在显示在“管理包”中的“未列出的包”下,并且不再显示在搜索结果中。

注意

若要避免测试包在 nuget.org 上处于活动状态,可以推送到 位于 https://int.nugettest.org的 nuget.org 测试站点。请注意,上载到 int.nugettest.org 的包可能不会保留。

祝贺你创建和发布第一个 NuGet 包!

第 9 频道YouTube 上查找更多 NuGet 视频。

后续步骤

查看有关如何使用 dotnet CLI 创建包的更多详细信息:

获取有关创建和发布 NuGet 包的详细信息: