【微软技术栈】发布自己造的轮子 -- 创建Nuget包(分布操作)

目录

1、您的项目

2、创建 .nuspec 文件

3、一张图片胜过一千个拉取请求

4、包括自述文件 MD 文件

5、构建软件包

6、将包部署到 Nuget.Org

7、手动上传软件包

8、自动化和脚本化部署

9、我们如何构建和部署 ErrLog.IO Nuget 包

10、Nuget统计数据

11、最后的思考


 

创建 Nuget 包是一个相对简单的过程,但第一次可能有点令人生畏。本教程将逐步引导您完成该过程。

Microsoft 提供了有关 Nuget 的全面文档,但我们在此处简化了该过程以提供帮助。

1、您的项目

理想情况下,Nuget 包应为 .NET Framework 类库。在我们的实例中,我们使用一个 C# 实例,并且该包在所有意图中都是一个普通的类库。

要包含在包中的任何文件(如文档或 readme.md 文件)都应包含在项目中。

3a647a3f9fc94dbade199970cc13fe92.png

2、创建 .nuspec 文件

Nuget 包的主要组件是 .nuspec 文件。这是一个表示包的 XML 文件,包含 Nuget.org 发布包所需的所有信息。

虽然不是必需的,但如果将 .nuspec 文件包含在项目的根目录中,则会使工作变得更容易一些。

空的 .nuspec 文件如下所示。这是可用于创建第一个包的基本结构。

XML格式
<?xml version="1.0"?>
<package  xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"><metadata>    <id></id><version></version><title></title><authors></authors><owners></owners><licenseUrl></licenseUrl><projectUrl></projectUrl><iconUrl></iconUrl><requireLicenseAcceptance>false</requireLicenseAcceptance><description></description><releaseNotes></releaseNotes><copyright></copyright><tags></tags><dependencies><dependency id="" /></dependencies><summary></summary></metadata><files><file src="" target="" /></files>
</package>

一个真实的例子 - 我们的 ErrLog.IO.Nuspec 文件

XML格式
<?xml version="1.0"?>
<package  xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"><metadata>    <id>errlog.io</id><version>1.1.18</version><title>ErrLog.IO Error and Exception Logging Tool</title><authors>Matthew Proctor, Michael Sanders, Alastair Bateman</authors><owners>kutamo</owners><licenseUrl>https://errlog.io/terms</licenseUrl><projectUrl>https://errlog.io/docs/getting-started</projectUrl><iconUrl>https://www.errlog.io/images/errlog_dark_logo.png</iconUrl><requireLicenseAcceptance>false</requireLicenseAcceptance><description>ErrLog.IO is an exception and error logging tool</description><releaseNotes>Bug fixes and performance improvements </releaseNotes><copyright>Copyright 2017 Kutamo Pty. Ltd.</copyright><tags>exceptions web http error logging</tags><dependencies><dependency id="Newtonsoft.Json" version="10.0"  /></dependencies><summary>ErrLog.IO is an exception and error logging tool.</summary></metadata><files><file src="readme.md" target="" /></files>
</package>

必需的 .nuspec 元素

元素描述或细节
id不区分大小写的包标识符,该标识符在 nuget.org 中必须是唯一的。ID 不能包含对 URL 无效的空格或字符,并且通常遵循 .NET 命名空间规则。
version包的版本,遵循以下模式。请确保为每个后续包部署更新此值。major.minor.patch
description用于 UI 显示的包的长描述 - 这应该是对包及其提供的功能的描述。
authors以逗号分隔的包作者列表,与 nuget.org 上的配置文件名称匹配。

有用但可选的 .nuspec 元素

元素描述或细节
title只需包的标题,通常在 UI 中显示为 nuget.org 和 Visual Studio 中的包管理器。如果未指定,则使用包 ID。
projectUrl程序包主页的 URL,通常显示在 UI 显示和 nuget.org 中。
licenseUrl包许可证的 URL(如果有)。
iconUrl具有透明背景的 64x64 图像的 URL,用作 UI 显示中包的图标。这必须是完全限定的 URL。如果未指定,则包将具有默认的 Nuget 徽标。
releaseNotes在此版本的包中所做的更改的简要说明。
copyright软件包的版权详细信息。

.nuspec 文件具有许多其他配置选项,此处记录了这些选项。

3、一张图片胜过一千个拉取请求

为了帮助您的软件包与 Nuget.org 库中的数千个其他软件包区分开来,创建自己的徽标是个好主意。

徽标必须是具有透明背景的 64x64 像素图像,并且包含在 .nuspec 文件的元素中。<iconUrl></iconUrl>

4、包括自述文件 MD 文件

readme.md 文件是向用户提供有关如何使用包的说明的好方法。

安装包后,这将显示在 Visual Studio 中,并使用 markdown 编写。

您可以在此处查看我们的自述文件。

5、构建软件包

创建 .nuspec 文件后,现在可以生成包了!

Nuget.Org 提供了一个应用程序 nuget.exe用于将库捆绑到 Nuget 包中。如果使用的是 Visual Studio,则应该已经安装了此软件,也可以从 nuget.org/downloads 下载它。

Nuget.exe 需要从项目文件夹内运行,因此最简单的方法是从命令提示符或 powershell 窗口进入此文件夹。

cd \your_project_folder\

Nuget.Exe 包存储库

如果你的库使用任何包,则需要告诉 Nuget 它们在电脑上的位置。这是通过使用 -Set repositoryPath 参数运行 nuget.exe 来完成的。

如果使用的是 Visual Studio,则包文件夹通常位于解决方案的根文件夹中。

nuget.exe config -Set repositoryPath="\full-path-to-your-packages-folder\"

现在,我们可以创建包了。在下面的示例中,我们将生成配置设置为 Release。

nuget.exe pack -IncludeReferencedProjects -properties Configuration=Release

使用这些选项,Nuget 将创建一个 .nupkg,其中包含任何引用的包和项目。

使用以下格式自动创建包文件名[package id].[package version].nupkg

例如,最近的软件包文件名是 errlog.io.1.1.18.nupkgErrLog.IO

6、将包部署到 Nuget.Org

准备好 .nupkg 文件后,现在可以将其部署到 Nuget.Org。

此时,我们假设您已经在 Nuget.Org 上创建了一个帐户,并创建了一个 API 密钥。

7、手动上传软件包

只需访问 https://www.nuget.org/packages/manage/upload,即可将 .nupkg 文件上传到 nuget。

Nuget 将打开包,读取 .nuspec 文件,然后发布包,只需一个步骤即可完成。

8、自动化和脚本化部署

NuGet.exe 能够自动上传包 - 这意味着你可以编写脚本来自动生成和部署包,无需交互。

若要通过 nuget.exe 上传包,首先需要设置 API 密钥。您可以在 Nuget.Org 上的帐户中创建 API 密钥。

nuget.exe config setApiKey aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

设置 API 密钥后,现在可以使用 Nuget.Exe 将包推送到 Nuget.Org。这听起来很奇怪,不管你说多少次。

nuget.exe push [your-package-filename].nupkg -Source https://www.nuget.org/api/v2/package

方便的提示!

该命令还支持通配符,因此您只需使用单个命令即可自动推送文件夹中的任何 .nupkg 文件。push

nuget.exe push *.nupkg -Source https://www.nuget.org/api/v2/package

9、我们如何构建和部署 ErrLog.IO Nuget 包

我们使用一个简单的批处理文件来自动生成和部署我们的 Nuget 包,我们很高兴在下面分享它(对一些项目进行了模糊处理)。ErrLog.IO

REM Move to project folder
cd E:\ErrLog\ErrLogNuget\REM Configure Nuget Settings
nuget config -Set repositoryPath="E:\ErrLog\packages"
nuget setApiKey aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeeREM Create Nuget Package
nuget pack -IncludeReferencedProjects -properties Configuration=ReleaseREM Deploy to Nuget.Org
nuget push *.nupkg -Source https://www.nuget.org/api/v2/package

10、Nuget统计数据

Nuget 包页提供了包下载的便捷摘要,以及数据透视表形式的更多详细信息,使你能够查看每个版本和每个客户端类型的下载。

11、最后的思考

部署用于全球分发的 Nuget 包很容易,但也很容易意外部署损坏的包,因为测试是你的责任。

请确保你有一个可靠的测试过程,以便在发布包后立即下载和验证包,以确保你的用户有一个出色且无错误的体验。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/265181.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于ASJ 系列剩余电流动作继电器的详细介绍-安科瑞 蒋静

1 概述 ASJ 系列剩余电流动作继电器可与低压断路器或低压接触器等组成组合式剩余电流保护装置&#xff0c;主要适用 于交流 50Hz &#xff0c;额定电压 400V 及以下的 TT 和 TN 系统配电线路&#xff0c;用来对电气线路进行接地故障保护&#xff0c;防止 接地故障电…

安全访问服务边缘(SASE):解决第三方风险的全方位解决方案

随着数字化时代的到来&#xff0c;企业和组织对于网络安全的需求越来越迫切。传统的安全解决方案已经无法满足复杂多变的网络环境&#xff0c;因此新兴的安全访问服务边缘&#xff08;SASE&#xff09;应运而生。本文将介绍SASE的概念和工作原理&#xff0c;并重点阐述它作为第…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…

awt中文乱码-Intellij IDEA

乱码的根本原因在于秦始皇嘎太早了&#xff08;bushi 解决方法&#xff1a;肉眼可见的编码设置统一为GBK 1.打开设置找到文件编码 2.肉眼可见的编码统统改成GBK 有人该问了&#xff0c;为什么不改成utf-8&#xff0c;因为awt的编码由操作系统决定&#xff0c;我的是win家庭中…

队列的模拟实现

队列的模拟实现 文章目录 队列的模拟实现前言一、队列的基本原理1&#xff09;队列的定义2&#xff09;队列的特性3&#xff09;队列的应用场景 二、模拟实现STL中队列的功能1&#xff09;设计数据结构2&#xff09;初始化队列&#xff08;QueueInit&#xff09;3&#xff09;入…

MySQL 中Relay Log打满磁盘问题的排查方案

MySQL 中Relay Log打满磁盘问题的排查方案 引言&#xff1a; MySQL Relay Log&#xff08;中继日志&#xff09;是MySQL复制过程中的一个重要组件&#xff0c;它用于将主数据库的二进制日志事件传递给从数据库。然而&#xff0c;当中继日志不断增长并最终占满磁盘空间时&…

Flutter:web项目跨域问题解决

前后端解决系列 文章目录 一、Flutter web客户端解决本地环境调试跨域问题二、Flutter web客户端解决线上环境跨域问题 一、Flutter web客户端解决本地环境调试跨域问题 就一句命令【--web-browser-flag "--disable-web-security"】&#xff0c;用来屏蔽浏览器域名请…

简单实现Spring容器(五) 实现bean后置处理器BeanPostProcessor机制

阶段5: // 1.编写自己的Spring容器,实现扫描包,得到bean的class对象. // 2.扫描将 bean 信息封装到 BeanDefinition对象,并放入到Map. // 3.初始化单例池并完成getBean() createBean()方法 // 4.完成依赖注入(如果创建某个Bean对象,存在依赖注入,需要进行bean组装操作) 5.bean…

城市基础设施智慧路灯改造的特点

智慧城市建设稳步有序推进。作为智慧城市的基础设施&#xff0c;智能照明是智慧城市的重要组成部分&#xff0c;而叁仟智慧路灯是智慧城市理念下的新产品。随着物联网和智能控制技术的飞速发展&#xff0c;路灯被赋予了新的任务和角色。除了使道路照明智能化和节能化外&#xf…

机器学习 类别特征编码:Category Encoders 库的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

使用WebyogSQLyog使用数据库

数据库 实现数据持久化到本地&#xff1a; 使用完整的管理系统统一管理&#xff0c; 数据库&#xff08;DateBase&#xff09;&#xff1a; 为了方便数据存储和管理&#xff08;增删改查&#xff09;&#xff0c;将数据按照特定的规则存储起来 安装WebyogSQLyog -- 创建数…

STP(生成树协议)

STP&#xff08;生成树协议&#xff09; 生成树协议原理&#xff1a; ​在二层交换网络中&#xff0c;逻辑的阻塞部分接口&#xff0c;实现从根节点到所有节点唯一的路径的生成&#xff0c;成为一个没有环路的拓扑。当最佳路径数显故障时&#xff0c;个别被阻塞的接口将被打开…