通过


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

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

先决条件

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

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

创建类库项目

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

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

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

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

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

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

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

Important

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

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

Note

对于为公共使用而生成的包,请特别注意该 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 pack时自动运行dotnet build,请将以下代码行添加到<PropertyGroup>中的项目文件:

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

发布软件包

.nupkg 文件发布到 nuget.org,方法是将 dotnet nuget push 命令与从 nuget.org 获取的 API 密钥配合使用。

Note

  • Nuget.org 扫描所有上传的程序包以检测病毒,并拒绝包含病毒的任何程序包。 Nuget.org 还会定期扫描所有现有列出的包。

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

获取 API 密钥

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

  2. 在右上角,选择用户名,然后选择 API 密钥

  3. 选择“ 创建”,然后输入密钥的名称。

  4. 选择范围中,选择推送

  5. “选择包”下,对于 Glob 模式,输入星号 (*)。

  6. 选择“创建”

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

    nuget.org 页的屏幕截图,其中显示了新的 API 密钥、有关立即复制密钥的消息,以及突出显示的“复制”按钮。

Important

  • 始终将 API 密钥保留为机密。 API 密钥就像一个密码,任何人都可以用它替你管理包。 如果 API 密钥意外泄露,请将其删除或重新生成。
  • 将密钥保存在安全的位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以复制密钥。 如果不再需要推送包,还可以删除 API 密钥。

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

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

有关详细信息,请参阅 作用域 API 密钥

使用 dotnet nuget push 进行发布

从包含 .nupkg 文件的文件夹运行以下命令。 将 <package-file> 替换为您的 .nupkg 文件的名称,将 <API-key> 替换为您的 API 密钥。

dotnet nuget push <package-file> --api-key <API-key> --source https://api.nuget.org/v3/index.json

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

Pushing <package-file> to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
  Created https://www.nuget.org/api/v2/package/ 2891ms
Your package was pushed.

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

发布错误

运行 push 命令时,有时会遇到错误。 例如,在以下情况下可能会出现错误:

  • API 密钥无效或已过期。
  • 您尝试发布一个包,但该包的标识符已存在于主机上。
  • 对已发布的包进行更改,但在再次尝试发布版本号之前,忘记更新版本号。

错误消息通常指示问题的来源。

例如,假设标识符 Contoso.App.Logger.Test 存在于 nuget.org 上。如果尝试发布具有该标识符的包,则会出现以下错误:

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,选择右上角的用户名,然后选择“ 管理包”。

Note

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

有关尚未发布的软件包的 nuget.org 警告消息的屏幕截图。文本指出验证和索引可能需要一小时。

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

如果创建无效的包(例如来自空类库的此示例包),或者不希望包可见,则可以 取消列出 包以将其从搜索结果中隐藏:

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

    “nuget.org 包”页的屏幕截图。“已发布的包”部分列出了一个包。其编辑图标突出显示。

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

    nuget.org 页的屏幕截图。在“列表”部分中,突出显示了在搜索结果中列出包的选项。

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

Note

为了避免测试包在 nuget.org 上实时运行,可以推送到 nuget.org 测试站点。 https://int.nugettest.org请注意,上载到 int.nugettest.org 的包可能不会保留。

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

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

后续步骤

请参阅有关如何使用 dotnet CLI 创建包的更多详细信息:

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