快速入门:使用 Visual Studio 创建和发布包(.NET Framework,Windows)

使用 Microsoft Visual Studio,可以从 .NET Framework 类库创建 NuGet 包,然后使用 NuGet CLI 工具将其发布到 nuget.org。

本快速入门仅适用于Windows用户。 如果使用 Visual Studio for Mac,请参阅 dotnet CLI 工具

先决条件

  • 安装包含任何 .NET 相关工作负荷的 Windows 版 Visual Studio 2022。

    你可以从 visualstudio.microsoft.com免费安装 2022 社区版,也可以使用专业版或企业版。

    安装.NET工作负荷时,Visual Studio 2017 及更高版本会自动包含 NuGet 功能。

  • nuget.org注册免费帐户(如果还没有帐户)。 必须先注册并确认帐户,然后才能上传 NuGet 包。

  • 通过从 nuget.org 下载 NuGet CLI 来安装它。将 nuget.exe 文件添加到合适的文件夹,并将该文件夹添加到 PATH 环境变量。

创建类库项目

若要创建类库项目,请执行以下步骤:

  1. 在 Visual Studio 中,选择 文件>新建>项目

  2. 创建一个新项目窗口中,选择下拉列表中的 C#WindowsLibrary

  3. 在生成的项目模板列表中,选择 Class Library (.NET Framework),然后选择 Next

  4. 配置新的 project 窗口中,输入 AppLoggerProject name,然后选择 Create

  5. 若要确保项目正确创建,请选择“ 生成>生成解决方案”。 DLL 位于“调试”文件夹中(或“发布”(如果改为生成该配置)。

  6. (可选)对于本快速入门,无需为 NuGet 包编写任何其他代码,因为模板类库足以创建包。 但是,如果想要此示例包的一些功能代码,请包含以下代码:

    namespace AppLogger
    {
        public class Logger
        {
            public void Log(string text)
            {
                Console.WriteLine(text);
            }
        }
    }
    

    在实际 NuGet 包中,你可能实现许多有用的功能,其他人可以使用这些功能生成应用程序。 还可以设置目标框架。 有关示例,请参阅 UWP

为软件包配置项目属性

NuGet 包包含清单(文件 .nuspec ),其中包含相关的元数据,例如包标识符、版本号、说明等。 其中一些元数据可以直接从项目属性中提取,从而避免在项目和清单中单独更新它们。 以下步骤介绍如何设置适用的属性:

  1. 选择 Project > Properties,然后选择 Application 选项卡。

  2. 对于 程序集名称,请为包提供唯一标识符。 如果尝试发布具有已存在名称的包,则会看到错误。

    Important

    你必须为包指定一个在 nuget.org 或你所使用的主机上唯一的标识符。 否则,就会出错。 对于本快速入门,我们建议在名称中包含 示例测试 ,因为发布步骤使包公开可见。

  3. 选择 程序集信息,这将显示一个对话框,你可以在对话框中输入会影响清单的其他属性(请参阅 替换令牌)。 最常用的字段是 标题说明公司版权程序集版本。 由于这些属性在发布后与包一起显示在主机上,例如 nuget.org,因此请确保它们具有完全的描述性。

    截图显示了 Visual Studio 中 .NET Framework 项目的“程序集信息”页面。

  4. (可选)若要直接查看和编辑属性,请通过选择Project>,在项目中打开Properties/AssemblyInfo.cs文件。

  5. 设置这些属性后, 将 Active 解决方案配置设置为 Build>Configuration Manager设置为 Release 并重新生成项目以生成更新的 DLL。

生成初始清单

设置项目属性并创建 DLL 后,现在可以从项目生成初始 .nuspec 文件。 此步骤包括相关替换标记,以从项目文件中提取信息。

仅运行 nuget spec 一次以生成初始清单。 如果您更新了包,请更改项目中的值,或直接编辑清单文件:

  1. Solution Explorer 中打开项目后,通过选择 Tools>Command Line>Developer 命令提示符打开命令提示符。

    命令提示符将在文件所在的 AppLogger.csproj 项目目录中打开。

  2. 运行以下命令:nuget spec AppLogger.csproj

    NuGet 创建了一个与项目名称匹配的清单,在本例中是 AppLogger.nuspec。 它还包括清单中的替换令牌。

  3. 在文本编辑器中打开 AppLogger.nuspec 以检查其内容,其内容将类似于以下代码:

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>Package</id>
        <version>1.0.0</version>
        <authors>Your username</authors>
        <owners>Your username</owners>
        <license type="expression">MIT</license>
        <!-- <icon>icon.png</icon> -->
        <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package description</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2022</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
    </package>
    

编辑清单

  1. 继续操作之前,请编辑以下属性。 否则,如果尝试使用文件中的默认值 .nuspec 创建 NuGet 包,则会发生错误。 有关这些属性的信息,请参阅 可选元数据元素

    • 许可证网址
    • projectUrl
    • releaseNotes
    • 标记
  2. 对于为公共使用而生成的包,请特别注意 Tags 属性,因为标记可帮助其他人找到包并了解它的作用。

  3. 还可以暂时将任何其他元素添加到清单,如 .nuspec 文件引用中所述。

  4. 保存文件,然后再继续。

运行 pack 命令

  1. Solution Explorer 中打开项目后,通过选择 Tools>Command Line>Developer 命令提示符打开命令提示符。

    命令提示符将在项目目录中打开。

  2. 运行以下命令:nuget pack

    NuGet 在当前文件夹中生成一个名为identifier.version.nupkg形式的.nupkg文件。

发布软件包

创建 .nupkg 文件后,将其发布到 nuget.org,方法是使用 NuGet CLI 和从 nuget.org 获取的 API 密钥。对于 nuget.org,必须使用 nuget.exe 4.1.0 或更高版本。

如果要在将包发布到公共库之前对其进行测试和验证,可以将其上传到测试环境,例如 int.nugettest.org 而不是 nuget.org。请注意,上载到 int.nugettest.org 的包可能无法保留。

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 密钥

使用 NuGet CLI 进行发布

使用 NuGet CLI(nuget.exe)是使用 .NET CLI 的替代方法:

  1. 打开命令提示符并更改为包含 .nupkg 文件的文件夹。

  2. 运行以下命令。 将包文件名<替换为>包的文件名,并将 API 密钥值<替换为 >API 密钥。 包文件名是将包 ID 和版本号串联后附加上 .nupkg 扩展名组成的。 例如 ,AppLogger.1.0.0.nupkg

    nuget push <package filename> <api key value> -Source https://api.nuget.org/v3/index.json
    

    发布过程的结果如下所示:

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

有关详细信息,请参阅 nuget 推送

发布错误

运行 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 的包可能不会保留。

后续步骤

恭喜使用 Visual Studio .NET Framework 创建 NuGet 包。 转到下一篇文章,了解如何使用 NuGet CLI 创建 NuGet 包。

若要探索 NuGet 提供的更多功能,请参阅以下文章: