【微软技术栈】发布自己造的轮子 -- 创建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 文件)都应包含在项目中。

standard-class-library-r-700.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.mzph.cn/news/206374.shtml

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

相关文章

电话卡Giffgaff激活

Giffgaff是一家总部位于英国的移动电话公司。作为一家移动虚拟网络电信运营商&#xff0c;Giffgaff使用O2的网络&#xff0c;是O2的全资子公司&#xff0c;成立于2009年11月25日。 Giffgaff与传统的移动电话运营商不同&#xff0c;区别在于其用户也可以参与公司的部分运营&…

Java简易版:UDP协议实现群聊

服务端&#xff1a; package 二十一章;import java.io.*; import java.net.*; import java.util.ArrayList; public class T{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void…

华为云短信验证

将相关代码整理出来,可以直接调取引用 华为云短信的参数需要自己去注册华为云账号,然后去购买套餐,相关参数里面都有,获取并不复杂 class HuaWeiSMS {const APP_KET xxxxxxxxxxxxx;//APP_Keyconst APP_SECRET xxxxxxxxxxxxxxx;//APP_Secretconst URL https://smsapi.cn-no…

翡翠手镯镯子断了怎么修复?

修复翡翠镯子需要谨慎对待&#xff0c;因为翡翠是一种比较脆弱的宝石&#xff0c;不适合使用一般的胶水或者粘合剂。必须选择针对翡翠手镯玉器玉石珠宝宝石石材专用的胶粘剂&#xff1a; 1.收集断裂的部分&#xff1a; 尽量收集到所有断裂的部分&#xff0c;包括碎片。这有助于…

Raspberry Pi 2, 2 of n - Pi 作为 IoT 消息代理

目录 介绍 环境 先决条件 - 设置静态 IP 地址 安装 Mosquitto 启动/停止 Mosquitto 配置先决条件 - 安装 mqtt_spy 配置 Mosquitto 配置 Mosquitto - 无安全性 测试 Mosquitto 配置 - 无安全性 配置 Mosquitto - 使用密码身份验证 Mosquitto 测试 - 带密码验证 概括 介绍 在本文…

数据二十条

"数据二十条"即中共中央、国务院关于构建数据基础制度更好发挥数据要素作用的意见&#xff0c;全文共分为五章二十条。 一、发布 2022年6月22日召开了中央全面深化改革委员会第二十六次会议。审议通过《关于构建数据基础制度更好发挥数据要素作用的意见》。 2022…

【React】react-router-dom路由导航的跳转及传参

路由导航跳转方式有&#xff1a; 1、声明式导航&#xff1a;解析成a标签跳转 // 引入 import { Link } from "react-router-dom";//使用 const Home()>{return (<div><Link to"login">去登录</Link></div>) } export default…

YOLOv7独家最新改进《全网无重复》感知聚合SERDetect检测头:高效涨点,即插即用|检测头新颖改进

💡本篇内容:YOLOv7独家最新改进《感知聚合SERDetect检测头》高效涨点,即插即用|检测头新颖改进 💡🚀🚀🚀本博客 YOLO系列 + 感知聚合SERDetect检测头 改进创新点改进源代码改进 适用于 YOLOv7 按步骤操作运行改进后的代码即可 💡附改进源代码及教程,适合用来…

ThinkPHP插件开发实例

ThinkPHP插件开发是一个扩展框架功能的方式&#xff0c;它能提高代码的可重用性&#xff0c;使得项目的开发变得更加高效。以下是一个简单的ThinkPHP插件开发的示例&#xff1a; 创建插件文件 在ThinkPHP项目根目录中创建一个名为 "demo" 的插件文件夹&#xff0c;…

机器学习应用 | 使用 MATLAB 进行异常检测(下)

在使用MATLAB 进行异常检测&#xff08;上&#xff09;中&#xff0c;我们探讨了什么是异常值&#xff0c;简单的一维数据异常检测问题&#xff0c;针对高维数据的有监督异常检测方法。 在&#xff08;下&#xff09;篇中&#xff0c;我们将和大家一起探讨无监督异常检测。 没…

【WPF】使用`Dispatcher.Invoke`方法将操作切换回UI线程,并在UI线程上更新对象的变量

以下是一个示例&#xff1a; // 在后台线程执行耗时操作 Task.Run(() > {// 耗时操作// 更新UI线程上的变量Application.Current.Dispatcher.Invoke(() >{// 在UI线程上给调用对象的变量赋值YourObject.YourVariable newValue;}); });在上面的示例中&#xff0c;Task.R…

智能优化算法应用:基于金枪鱼群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金枪鱼群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金枪鱼群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金枪鱼群算法4.实验参数设定5.算法结果6.参考…

MySQL中替代 Oracle的decode函数

MySQL 中可以使用 CASE WHEN 语句替代 Oracle 中的 decode 函数。 例如&#xff0c;Oracle 中的 decode 函数语法为&#xff1a; decode(expression, search_value_1, result_1, search_value_2, result_2, ..., default_result)可以使用 MySQL 的 CASE WHEN 语句来实现类似的…

linux搭建nacos集群

准备 检查是否安装jdk [roothao /usr/local/software/elk/logstash]# java -version java version "1.8.0_341" Java(TM) SE Runtime Environment (build 1.8.0_341-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)配置nacos 去github下载…

【PTA-C语言】编程练习4 - 数组Ⅰ

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 编程练习4 - 数组Ⅰ&#xff08;1~7&#xff09; 7-1 评委打分&#xff08;分数 10&#xff09;7-2 组合数的和&#xff08;分数 10&#xff09;7-3 找不同&#xff08;分数 15&#xff09;7-4 利用二分查找…

【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

数据库:JDBC编程

专栏目录 MySQL基本操作-CSDN博客 MySQL基本操作-CSDN博客 数据库的增删查改&#xff08;CRUD&#xff09;基础版-CSDN博客 数据库增删改查&#xff08;CRUD&#xff09;进阶版-CSDN博客 数据库的索引-CSDN博客 基本概念 JDBC编程就是通过Java代码来操作数据库 api 数据库是…

深入理解网络 I/O 多路复用:SELECT、POLL

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

工业4G路由器助力轨道交通城市地铁实现数字化转型

随着城市的科技不断发展&#xff0c;地铁系统的智能化程度也在不断提高。地铁闸机的网络部署已经成为地铁建设中必不可少环节。而4G路由器作为地铁闸机的网络通讯设备&#xff0c;助力轨道交通地铁闸机实现数字化转型。 工业4G路由器在地铁系统光纤宽带网络遇到故障或其他问题…

CGAL的推进前表面重建

从非结构化点云进行的曲面重建相当于生成一个合理的曲面&#xff0c;该曲面很好地近似于输入点。由于可能生成许多曲面&#xff0c;因此此问题不适合解决。已经提出了一系列广泛的方法来解决这个问题。其中包括变分方法、张量表决、隐式曲面和Delaunay三角剖分。 对于基于Delau…