[.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
发布成功后,搜索看下效果:
哈哈,挺好玩吧!第一个属于自己的NuGet包 。too perfect!
PS: 还可以添加 Readme.txt 文件, 当在直接安装包之后立即将该文件的内容显示(文末有详解)
下面所有内容均为上述地址拷贝,仅用作其他任何情况不能访问时阅读,如上 [ 原文 ] 地址可访问,请直接阅读忽略下面内容!!
------------------------------------- 以下为备份 --------------------------
从 .NET 类库创建 NuGet 包并使用 dotnet
命令行接口 (CLI) 将其发布到 nuget.org 是很简单的过程。
必备条件
安装包括 CLI 的.NET Core SDK
dotnet
。 从 Visual Studio 2017 开始,dotnet CLI 将自动随任何与 .NET Core 相关的工作负载一起安装。如果你还没有帐户,请在 nuget.org 上注册一个免费帐户。 创建新帐户会发送确认电子邮件。 必须先确认该帐户,才能上传包。
创建类库项目
你可以使用现有的 .NET 类库项目用于要打包的代码,或者创建一个简单的项目,如下所示:
创建名为
AppLogger
的文件夹。打开命令提示符并切换到
AppLogger
文件夹。类型
dotnet new classlib
,它使用项目当前文件夹的名称。这会创建新项目。
将包元数据添加到项目文件
每个 NuGet 包都需要一个清单,用以描述包的内容和依赖项。 在最终包中,清单是基于项目文件中包含的 NuGet 元数据属性生成的 .nuspec
文件。
打开项目文件 (
.csproj
),并在现有<PropertyGroup>
标记内至少添加以下属性,同时根据需要更改值:XML复制<PackageId>AppLogger</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
重要
为包提供一个在 nuget.org 中唯一或你使用的任何主机的标识符。 对于本次演练,我们建议在名称中包含“Sample”或“Test”,因为稍后的发布步骤确实会使该包公开显示(尽管实际上不太可能有人会使用它)。
添加 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:\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>
中的项目文件内:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
发布包
有了 .nupkg
文件后,可以使用 dotnet nuget push
命令以及从 nuget.org 获取的 API 密钥将其发布到 nuget.org。
备注
病毒扫描:所有上传到 nuget.org 的包都会进行病毒扫描,如果发现任何病毒,将拒绝包。 此外,还会定期扫描 nuget.org 上列出的所有包。
发布到 nuget.org 的包也对其他开发者公开可见,除非你取消列出它们。 若要专门托管包,请参阅托管包。
获取 API 密钥
登录你的 nuget.org 帐户,或创建一个帐户(如果你还没有帐户)。
有关创建帐户的详细信息,请参阅个人帐户。
选择用户名(在右上角),然后选择“API 密钥”。
选择“创建” ,提供密钥名称,选择“选择范围”>“推送” 。 输入“Glob 模式” *,然后选择“创建” 。 (请参阅下面有关范围的详细信息。)
创建密钥后,选择“复制”,检索需要在 CLI 中使用的访问密钥 :
重要事项:将你的密钥保存在安全位置,因为以后无法再次复制密钥。 如果返回到 API 密钥页,则需要重新生成密钥以对其进行复制。 如果不再希望通过 CLI 推送包,还可以删除 API 密钥。
范围允许创建针对不同用途的单独 API 密钥。 每个密钥都有其过期时间,并且可以将范围限定为特定包(或 glob 模式)。 每个密钥还将范围限定为特定操作:新包和更新推送、仅更新推送,或者从列表中删除。 通过范围限定,可以为管理组织不同包的不同人员创建 API 密钥,这样他们就只有所需的权限。 有关详细信息,请参阅范围内的 API 密钥。
用 dotnet nuget push 发布
更改到包含
.nupkg
文件的文件夹。运行以下命令,指定包名称(唯一包 ID)并使用你的 API 密钥替换密钥值:
.NET Core CLI复制dotnet nuget push AppLogger.1.0.0.nupkg -k qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 -s https://api.nuget.org/v3/index.json
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,其他开发人员可在自己的项目中使用它。
如果你已在本演练中创建一个实际上并不使用的包(例如使用空的类库创建的包),则应取消列出将在搜索结果中隐藏的包:
在 nuget.org 上,选择用户名(在该页的右上角),然后选择“管理包” 。
找到你需要在“已发布”下取消列出的包,然后选择右侧的回收站图标:
在随后的页面上,清除标记有“在搜索结果中列出(包名)”的框,然后选择“保存”:
添加自述文件和其他文件
若要直接指定要包含在包中的文件,请编辑项目文件并使用 content
属性:
<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)的更多相关文章
- 利用 Azure Devops 创建和发布 Nuget 包
利用 Azure Devops 创建和发布 Nuget 包 原 Visual Studio Team Service ,简称 VSTS,能够创建 pipelines 管道以构建应用程序,并将其部署到任 ...
- 发布nuget包的正确姿势---cicd自动打包发布nuget包
最轻便的发布nuget包方式,方便cicd自动打包发布nuget包 首先新建项目 项目名随便取,这里就叫它GuiH.ClassLibrary 默认即可,需要改目标版本时,等创建好再改 项目创建好了 随 ...
- 流程自动化RPA,Power Automate Desktop系列 - DotNet Core打包并发布Nuget Package
一.背景 DotNet Core通常基于Nuget来实现包管理,如果你想要把自己的实现共享给其他人,通常我们需要把本地项目打包好,然后发布到对应的Nuget Server上,以便于其他人可以查找.安装 ...
- .NET Core中创建和使用NuGet包
在.NET Core的项目中,如果我们要在项目中引用其它DLL文件,不应该直接在项目引用中添加DLL文件(虽然在.NET Core项目中也可以这么做),建议是去直接下载DLL文件所属的NuGet包.这 ...
- NET Core:搭建私有Nuget服务器以及打包发布Nuget包
docker 安装 https://www.cnblogs.com/liuxiaoji/p/11014329.html 1.使用docker搭建私有Nuget服务器 docker run -d -p ...
- 发布nuget包
首先在nuget(www.nuget.org)注册账号,这里可以使用微软账号直接登录 一般有两种方式 1:在工程上右键打包然后直接在网站上上传就可以 2:通过获取key,然后使用控制台提交 登录后在右 ...
- 创建并发布npm包
1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站注册地址:https://www.npmjs.com/signup 2.命令行工具登录npm np ...
- 发布Nuget包时遇到都意外
准备好工具和发布教程.(这些网上都有,我就不说了,就说说我遇到都意外.) 在发布包都过程中,我给我都dll命名为Common.不知道是不是这个原因导致的我包发布上去后,程序对其引用时居然没主动引用进程 ...
- c# .net core + .net framework mongodb nuget 包
FastNet.Framework.Mongo https://github.com/my-core/FastNet.Framework GH.MongoDb.GenericRepository ht ...
- 手把手带你发布Nuget包-图文说话
博客:https://www.cnblogs.com/24klr/
随机推荐
- 15个Linux Grep命令使用实例(实用、常用)
Grep命令主要用于从文件中查找指定的字符串.首先建一个demo_file: 复制代码 代码如下: $ cat demo_fileTHIS LINE IS THE 1ST UPPER CASE LIN ...
- Linux:GPU
什么是GPU? CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处 ...
- delphi中实现http请求和提交
在对接本地的一个药械监管系统使用实现的代码,编译环境delphi Xe7 ,使用类TIdHTTP实现网络的get请求和post提交 //设置组件的属性 procedure TfrmMain.SetHt ...
- 为Delphi配置多套环境
假设我们使用Delphi6开发了一个投资系统,在开发过程中我们使用了indy控件.到目前为止投资系统已经发了若干个版本,如投资系统1.0.投资系统1.2.投资系统1.5.投资系统2.0.投资系统2.3 ...
- .NET周刊【1月第4期 2025-01-26】
国内文章 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解 https://www.cnblogs.com/lyhabc/p/18660810/linux-sql-ser ...
- NOIP 游记
前情提要:color \(100\to 0\),arena \(92/100\to 36\). 最后一场模拟赛喜提 0+0+100+0,挺乐的. Day 0 晚上九点睡,然而还是很早就醒了,但是时间体 ...
- mysql之我的第一个jdbc程序
package com.yeyue.lesson01; import java.sql.*; public class jdbcFirstDemo { public static void main( ...
- docker官网镜像无法下载问题解决
亲测可用,这个方法是由技术爬爬虾大佬提供,简单地说就是通过github上的docker_image_pusher项目,将国外docker镜像转存到阿里云私人仓库. 此方法需要你有一个github账号, ...
- babel-loader 如何工作? 什么是babel-loader插件? babel-loader插件可以干什么? 如何制作一个babel-loader插件?
本文会介绍比较基本的编译知识和babel-loader运作原理 babel-loader 是什么? 作为老一派的打包工具, babel-loader 想必大家已经非常熟悉了.它长这样子 // webp ...
- 交叉编译SQLite3
交叉编译SQLite3 SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的SQL 数据库引擎. 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置. ...