【微软技术栈】发布自己造的轮子 -- 创建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-eeeeeeeeeeee

REM Create Nuget Package
nuget pack -IncludeReferencedProjects -properties Configuration=Release

REM Deploy to Nuget.Org
nuget push *.nupkg -Source https://www.nuget.org/api/v2/package

10、Nuget统计数据

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

11、最后的思考

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3使用Tailwind CSS

安装 Tailwind 以及其它依赖项 npm install -D tailwindcsslatest postcsslatest autoprefixerlatest生成配置文件&#xff1a; npx tailwindcss init -p.修改配置文件 tailwind.config.js 2.6版本 &#xff1a; module.exports {purge: [./index.html, ./src/**/*.{vue,j…

结合ColorUI组件开发微信小程序

1.自定义组件生命周期函数&#xff1a; Component({data: {},attached() {console.log("自定义组件生命周期函数 attached--先执行");this.getPos();},ready() {console.log("ready生命周期函数---在attached之后执行")},methods: {getPos() {var that th…

macOS Big Sur/Mac电脑安装vscode显示您没有权限来打开应用程序‘Visual Studio Code‘ 请联系您的电脑或网络管理员问题修复

错误方法 首先我以为我的权限不足。&#xff0c;需要去用户群组里设置。结果根本不是这个的问题。 1.在系统偏好设置->用户与群组检查了一下我的用户是不是管理员 结果发现是管理员 2.根据苹果提示&#xff0c;右键我的文件夹->显示简介->最下面的共享与权限 解锁&…

【Linux】进程间通信之管道--命名管道匿名管道通信进程池设计

文章目录 一、进程间通信介绍1.什么是通信2.为什么要有通信以及如何进行通信 二、管道1.什么是管道2.匿名管道2.1什么是匿名管道2.2接口认识--pipe2.3进程间通信之匿名管道实现2.4读写特征2.5管道的特征2.6 进程池设计 3.命名管道3.1创建一个命名管道3.2用命名管道实现server&a…

大数据技术3:数据仓库的ETL和分层模型

前言&#xff1a;我们先了解一下数据仓库架构的演变过程。 1 、数据仓库定义 数据仓库是一个面向主题的&#xff08;Subject Oriented&#xff09;、集成的&#xff08;Integrate&#xff09;、相对稳定的&#xff08;Non-Volatile&#xff09;、反映历史变化&#xff08;Time…

3GPP标准查看、下载和几个UE相关系列标准

由于一直做终端侧协议。最近以UE为核心重新下载了一系列文档。 总结并举例一下分类标准。 如何查看3GPP标准列表 实际上在3GPP网站如下链接&#xff1a;Specifications by Series&#xff0c;每个系列以及分类都说的很清楚。 几个系列分类举例 和终端协议层工作比较关系密切…

鸿蒙OS应用开发之最简单的程序

鸿蒙OS应用开发之最简单的程序 前面介绍怎么样安装鸿蒙应用开发的环境&#xff0c;然后试着运行起来&#xff0c;并安装运行的虚拟机&#xff0c;以及对应9.0版本的API和SDK等软件。这样就具备了基本的开发基础&#xff0c;就可以进入创建应用程序开发了。 在我们起飞之前&…

Navicat 技术指引 | 适用于 GaussDB 分布式的日志查询与配置设置

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

c/c++中一些不常用但有用的知识

1.变长数组 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 语言中&#xff0c;变长数组&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 标准引入的特性&#xff0c;允许使用变量来定义数组的长度。因此&#xff0c;在 C 版本的代码…

遥测终端机RTU:实现远程监测和控制的重要工具

遥测终端机RTU对设备进行远程监测和控制&#xff0c;支持采集和传输数据&#xff0c;以实现对工业过程、公用事业、水文和环境的监测和管理。 遥测终端机RTU工作原理 计讯物联遥测终端机RTU通过网口、串口进行传感器/设备等现场数据采集&#xff0c;将其转换为数字信号&#xf…

数据库字段名和sql关键字冲突报错解决方法

1、修改实体类字段映射。注解里加反引号 2、sql字段上加反引号 3、问题解决

Flink 使用场景

Apache Flink 功能强大&#xff0c;支持开发和运行多种不同种类的应用程序。它的主要特性包括&#xff1a;批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink 不仅可以运行在包括 YARN、 Mesos、K8s 在内的多种资源管理框架上&#xff0c;还支持…

中东电商指南分享!盘点中东四大跨境电商平台

提到跨境电商新蓝海&#xff0c;就不得不想起土豪聚集地 ——中东&#xff0c;中东地区拥有庞大的人口、高人均GDP、强大的消费能力以及广泛普及的互联网&#xff0c;但外出购物却相对不便&#xff0c;正是这一特点为中东跨境电商市场创造了巨大的优势。随着中东地区电商的崛起…

无人机自主巡检是什么?如何实现自动巡检?

近年来&#xff0c;随着科技不断演进&#xff0c;无人机自主巡检技术在多个领域取得显著进展。那么&#xff0c;无人机自主巡检到底是什么&#xff1f;它又是如何实现自动化的呢&#xff1f; 一、无人机自主巡检的定义 无人机自主巡检技术是利用无人机对目标对象或区域进行巡检…

IntelliJ idea卡顿解决,我遇到的比较管用的方案

Setttings> Build, Execution,Deployment>Debugger> Data Views> Java 取消 Enable "toString()" object view; Speed up debugging in IntelliJ Yesterday, I observed painfully slow debugging in IntelliJ. Every step over or step in took almost…

信息解码(Message Decoding, ACM/ICPC World Finals 1991, UVa 213)

考虑下面的01串序列&#xff1a; 0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1101, 1110, 00000, … 首先是长度为1的串&#xff0c;然后是长度为2的串&#xff0c;依此类推。如果看成二进制&#xff0c;相同长度的后 一个串等于前一个串加1。注意上述…

【latex笔记】双栏格式下插入单栏、双栏格式图片

双栏格式下插入单栏、双栏格式图片 1.缘起multicols2.双栏格式 插入单栏图片3.双栏格式 插入双栏图片 1.缘起multicols 插入双栏格式图片问题被困扰了有很长一段时间&#xff0c;查看网络资源也一直没找到解决方法&#xff0c;今天查看Latex官方文档&#xff0c;才发现因为mul…

AGI 时代,小红书邀您一起复盘年度 100 件值得学习的好案例

2023 年&#xff0c;由 ChatGPT 引爆新一轮人工智能热潮&#xff0c;开启了由大模型驱动的 AGI 时代。随着 AIGC 的快速崛起&#xff0c;传统的研发模式是否会被 AI 颠覆也成为了巨大的未知数。面对不同规模团队与不同业务场景&#xff0c;企业想要找到可靠、可行、可落地的转型…

CLion手把手教你创建Windows项目

作为一个Jetbrains迷的我&#xff0c;下载了Jetbrains全家桶&#xff0c;我就想用CLion 编写 Windows 项目 前提&#xff1a;必须安装 Visual Studio 2022 New Project 选择 C Executable&#xff0c;取好项目名&#xff0c; 点击 Create 在 CMakeList.txt 中添加以下内容&…

期末速成数据库极简版【创建】(1)

目录 前言 【1】T-SQL语句创建数据库 【2】T-SQL语句删除数据库 【3】T-SQL语句创建表 完整性约束 数据类型 例子 【4】T-SQL语句修改表 【5】T-SQL语句删除表 关于数据库&#xff0c;在我们学习Linux网络编程后面会详细学习到&#xff0c;为了应付期末考试&#xff0…