[原文] :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

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

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

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

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

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

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

必备条件

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

  2. 如果你还没有帐户,请在 nuget.org 上注册一个免费帐户。 创建新帐户会发送确认电子邮件。 必须先确认该帐户,才能上传包。

创建类库项目

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

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

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

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

    这会创建新项目。

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

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

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

    XML复制

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

    重要

    为包提供一个在 nuget.org 中唯一或你使用的任何主机的标识符。 对于本次演练,我们建议在名称中包含“Sample”或“Test”,因为稍后的发布步骤确实会使该包公开显示(尽管实际上不太可能有人会使用它)。

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

    备注

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

运行 pack 命令

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

.NET Core CLI复制

 
# 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:\proj\AppLoggerNet\AppLogger\AppLogger.csproj.
AppLogger -> D:\proj\AppLoggerNet\AppLogger\bin\Debug\netstandard2.0\AppLogger.dll
Successfully created package 'D:\proj\AppLoggerNet\AppLogger\bin\Debug\AppLogger.1.0.0.nupkg'.

在生成期间自动生成包

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

XML复制

 
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

发布包

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

备注

病毒扫描:所有上传到 nuget.org 的包都会进行病毒扫描,如果发现任何病毒,将拒绝包。 此外,还会定期扫描 nuget.org 上列出的所有包。

发布到 nuget.org 的包也对其他开发者公开可见,除非你取消列出它们。 若要专门托管包,请参阅托管包

获取 API 密钥

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

    有关创建帐户的详细信息,请参阅个人帐户

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

  3. 选择“创建” ,提供密钥名称,选择“选择范围”>“推送” 。 输入“Glob 模式” *,然后选择“创建” 。 (请参阅下面有关范围的详细信息。)

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

  5. 重要事项:将你的密钥保存在安全位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以对其进行复制。 如果不再希望通过 CLI 推送包,还可以删除 API 密钥。

范围允许创建针对不同用途的单独 API 密钥。 每个密钥都有其过期时间,并且可以将范围限定为特定包(或 glob 模式)。 每个密钥还将范围限定为特定操作:新包和更新推送、仅更新推送,或者从列表中删除。 通过范围限定,可以为管理组织不同包的不同人员创建 API 密钥,这样他们就只有所需的权限。 有关详细信息,请参阅范围内的 API 密钥

用 dotnet nuget push 发布

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

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

    .NET Core CLI复制

     
    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 命令中的错误通常表示存在问题。 例如,你可能会忘记更新项目中的版本号,因此尝试发布已存在的包。

尝试使用主机上已存在的标识符发布包时,你也会看到错误。 例如,名称“AppLogger”已经存在。 在这种情况下,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 包发布到 nuget.org,其他开发人员可在自己的项目中使用它。

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

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

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

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

添加自述文件和其他文件

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

XML复制

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

这将在包根目录中包含一个名为 readme.txt 的文件。 Visual Studio 在直接安装包之后立即将该文件的内容显示为纯文本。 (对于安装为依赖项的包,不会显示自述文件)。 例如,下面是 HtmlAgilityPack 包的自述文件的显示方式:

备注

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

相关视频

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

[.net core] 创建和发布NuGet包 (dotnet CLI)的更多相关文章

  1. 利用 Azure Devops 创建和发布 Nuget 包

    利用 Azure Devops 创建和发布 Nuget 包 原 Visual Studio Team Service ,简称 VSTS,能够创建 pipelines 管道以构建应用程序,并将其部署到任 ...

  2. 发布nuget包的正确姿势---cicd自动打包发布nuget包

    最轻便的发布nuget包方式,方便cicd自动打包发布nuget包 首先新建项目 项目名随便取,这里就叫它GuiH.ClassLibrary 默认即可,需要改目标版本时,等创建好再改 项目创建好了 随 ...

  3. 流程自动化RPA,Power Automate Desktop系列 - DotNet Core打包并发布Nuget Package

    一.背景 DotNet Core通常基于Nuget来实现包管理,如果你想要把自己的实现共享给其他人,通常我们需要把本地项目打包好,然后发布到对应的Nuget Server上,以便于其他人可以查找.安装 ...

  4. .NET Core中创建和使用NuGet包

    在.NET Core的项目中,如果我们要在项目中引用其它DLL文件,不应该直接在项目引用中添加DLL文件(虽然在.NET Core项目中也可以这么做),建议是去直接下载DLL文件所属的NuGet包.这 ...

  5. NET Core:搭建私有Nuget服务器以及打包发布Nuget包

    docker 安装 https://www.cnblogs.com/liuxiaoji/p/11014329.html 1.使用docker搭建私有Nuget服务器 docker run -d -p ...

  6. 发布nuget包

    首先在nuget(www.nuget.org)注册账号,这里可以使用微软账号直接登录 一般有两种方式 1:在工程上右键打包然后直接在网站上上传就可以 2:通过获取key,然后使用控制台提交 登录后在右 ...

  7. 创建并发布npm包

    1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站注册地址:https://www.npmjs.com/signup 2.命令行工具登录npm np ...

  8. 发布Nuget包时遇到都意外

    准备好工具和发布教程.(这些网上都有,我就不说了,就说说我遇到都意外.) 在发布包都过程中,我给我都dll命名为Common.不知道是不是这个原因导致的我包发布上去后,程序对其引用时居然没主动引用进程 ...

  9. c# .net core + .net framework mongodb nuget 包

    FastNet.Framework.Mongo https://github.com/my-core/FastNet.Framework GH.MongoDb.GenericRepository ht ...

  10. 手把手带你发布Nuget包-图文说话

    博客:https://www.cnblogs.com/24klr/

随机推荐

  1. 20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧

    背景信息 攻击交易:https://app.blocksec.com/explorer/tx/bsc/0xd6ba15ecf3df9aaae37450df8f79233267af41535793ee1 ...

  2. w3cschool-HBase官方文档-3MapReduce

    HBase和MapReduce 2018-03-30 13:59 更新 HBase和MapReduce Apache MapReduce 是一个用于分析大量数据的软件框架.它由 Apache Hado ...

  3. w3cschool-Flink 入门

    Flink 入门   Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态的计算.Flink被设计为在所有常见的集群环境中运行,以内存中的速度和任何规模执行计算. A ...

  4. Docker基础命令(安装和创建管理容器)

     docker ps -a 查看容器 docker inspect c008 使用 inspect 命令查看镜像详细信息,包括制作者.适应架构.各层的数字摘要等.

  5. Nacos 从入门到精通-手把手教会你

    Nacos 使用教程 Nacos 是阿里巴巴开源的动态服务发现.配置管理和服务管理平台,旨在帮助您更容易地构建.交付和管理微服务平台.它集成了服务注册与发现.动态配置管理.动态 DNS 服务和服务及元 ...

  6. Q:Oracle表空间使用权限错误:ORA-01950

    使用A用户账号(默认表空间tablespace_A),A用户表中插入数据报错ORA-01950 报错处理方法: 方法1:授予用户A unlimited tablespace权限 grant unlim ...

  7. jar脚本练习

    javaServer.sh #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_131 export APP_HOME=/u01/app expo ...

  8. Atcoder ABC383E Sum of Max Matching 题解 [ 绿 ] [ 最小瓶颈路 ] [ 并查集 ] [ Kruskal 重构树 ]

    Sum of Max Matching:简单贪心,但我场上没切,唐完了. 思路 显然,对于最大边权最小问题,首先想到最小瓶颈路的 trick:按边的大小排序,对原图进行加边. 同时可以发现,这个匹配有 ...

  9. flutter-全局控制键盘收回和单独控制键盘收回

    局部控制键盘收回 import 'package:flutter/material.dart'; import 'package:TLDF/main.dart'; class KeyboardBack ...

  10. RowCellMenuCustomizations 实现 Command 绑定

    给GridControl的行数据单元格添加菜单项,并通过Command绑定的方式实现菜单点击动作触发: <dxg:GridControl x:Name="mainGrid" ...