[.net core] 创建和发布NuGet包 (dotnet CLI)

[原文] :https://docs.microsoft.com/zh-cn/nuget/quickstart/create-and-publish-a-package-using-the-dotnet-cli

以下为测试DEMO简记

.NET core CLI 发布:dotnet nuget push AppLogger.1.0.0.nupkg -k qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 -s https://api.nuget.org/v3/index.json

注意点:

1. 需要定位到打包好的 *.nupkg 后缀的文件夹目录,再运行 .NET core CLI 发布

2. 替换内容 AppLogger.1.0.0.nupkg 和 API Key 

发布成功后,搜索看下效果:

[.net core] 创建和发布NuGet包 (dotnet CLI)

哈哈,挺好玩吧!第一个属于自己的NuGet包 。too perfect!

PS: 还可以添加 Readme.txt 文件, 当在直接安装包之后立即将该文件的内容显示(文末有详解)


下面所有内容均为上述地址拷贝,仅用作其他任何情况不能访问时阅读,如上 [ 原文 ] 地址可访问,请直接阅读忽略下面内容!!

------------------------------------- 以下为备份 --------------------------

从 .NET 类库创建 NuGet 包并使用 dotnet 命令行接口 (CLI) 将其发布到 nuget.org 是很简单的过程。

必备条件

  1. 从 Visual Studio 2017 开始,dotnet CLI 将自动随任何与 .NET Core 相关的工作负载一起安装。

  2. 必须先确认该帐户,才能上传包。

创建类库项目

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

  1. 创建名为 AppLogger 的文件夹。

  2. 打开命令提示符并切换到 AppLogger 文件夹。

  3. 类型 dotnet new classlib,它使用项目当前文件夹的名称。

    这会创建新项目。

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

在最终包中,清单是基于项目文件中包含的 NuGet 元数据属性生成的 .nuspec 文件。

  1. 打开项目文件 (.csproj),并在现有 <PropertyGroup> 标记内至少添加以下属性,同时根据需要更改值:

    复制
     
    <PackageId>AppLogger</PackageId>
    <Version>1.0.0</Version>
    <Authors>your_name</Authors>
    <Company>your_company</Company>
    

     重要

    对于本次演练,我们建议在名称中包含“Sample”或“Test”,因为稍后的发布步骤确实会使该包公开显示(尽管实际上不太可能有人会使用它)。

  2. NuGet 元数据属性中描述的任何可选属性。

     备注

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

运行 pack 命令

若要从项目中生成 NuGet 包(.nupkg 文件),运行 dotnet pack 命令,它也会自动生成项目:

复制
 
# Uses the project file in the current folder by default
dotnet pack

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

复制
 
Microsoft (R) Build Engine version 15.5.180.51428 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 29.91 ms for D:projAppLoggerNetAppLoggerAppLogger.csproj.
  AppLogger -> D:projAppLoggerNetAppLoggerinDebug
etstandard2.0AppLogger.dll
  Successfully created package 'D:projAppLoggerNetAppLoggerinDebugAppLogger.1.0.0.nupkg'.

在生成期间自动生成包

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

复制
 
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

发布包

有了 .nupkg 文件后,可以使用 dotnet nuget push 命令以及从 nuget.org 获取的 API 密钥将其发布到 nuget.org。

 备注

此外,还会定期扫描 nuget.org 上列出的所有包。

托管包。

获取 API 密钥

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

    个人帐户。

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

  3. (请参阅下面有关范围的详细信息。)

  4. 创建密钥后,选择“复制”,检索需要在 CLI 中使用的访问密钥 :

    [.net core] 创建和发布NuGet包 (dotnet CLI)

  5. 如果不再希望通过 CLI 推送包,还可以删除 API 密钥。

范围内的 API 密钥。

用 dotnet nuget push 发布

  1. 更改到包含 .nupkg 文件的文件夹。

  2. 运行以下命令,指定包名称(唯一包 ID)并使用你的 API 密钥替换密钥值:

    复制
     
    dotnet nuget push AppLogger.1.0.0.nupkg -k qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 -s https://api.nuget.org/v3/index.json
    
  3. dotnet 会显示发布过程的结果:

    复制
     
    info : Pushing AppLogger.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
    info :   PUT https://www.nuget.org/api/v2/package/
    info :   Created https://www.nuget.org/api/v2/package/ 12620ms
    info : Your package was pushed.
    

dotnet nuget push。

发布错误

例如,你可能会忘记更新项目中的版本号,因此尝试发布已存在的包。

在这种情况下,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.).

更改包标识符,重建项目,重新创建 .nupkg 文件,然后重试 push 命令。

管理已发布的包

在该时间段,包页面会显示以下消息:

[.net core] 创建和发布NuGet包 (dotnet CLI)

刚刚已将第一个 NuGet 包发布到 nuget.org,其他开发人员可在自己的项目中使用它。

如果你已在本演练中创建一个实际上并不使用的包(例如使用空的类库创建的包),则应取消列出将在搜索结果中隐藏的包:

  1. 在 nuget.org 上,选择用户名(在该页的右上角),然后选择“管理包” 。

  2. 找到你需要在“已发布”下取消列出的包,然后选择右侧的回收站图标:

    [.net core] 创建和发布NuGet包 (dotnet CLI)

  3. 在随后的页面上,清除标记有“在搜索结果中列出(包名)”的框,然后选择“保存”:

    [.net core] 创建和发布NuGet包 (dotnet CLI)

添加自述文件和其他文件

若要直接指定要包含在包中的文件,请编辑项目文件并使用 content 属性:

复制
 
<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath></PackagePath>
  </Content>
</ItemGroup>

例如,下面是 HtmlAgilityPack 包的自述文件的显示方式:

[.net core] 创建和发布NuGet包 (dotnet CLI)

 备注

只在项目根目录添加 readme.txt 不会导致它被包含在生成的包中。

相关视频

YouTube 上查找更多 NuGet 视频。