[.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 CLIdotnet 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 不会导致它被包含在生成的包中。