如何从零开发一个NuGet软件包?
作者:依乐祝
首发地址:https://www.cnblogs.com/yilezhu/p/14175019.html
我想目前每个.net开发人员都应该知道nuget.org和NuGet软件包吧。但是,您是否曾经尝试并创建过一个nuget包呢?Nuget软件包比较容易引入到类库中。因此,可以使用NuGet软件包管理器将nuget软件包添加到任何项目中。
Nuget包的剖析
Nuget软件包不仅是dll文件。NuGet包是可移植的,它包含您要放入.Net项目中的所有内容。您可以在其中放置txt文件或png文件。这就是为什么我们称它们为“包裹”。您可以打包一些开发文件,并将它们以.nupkg格式在项目之间移动。
我刚刚解压缩了InputKit的nuget包,您可以在下图中看到nupkg文件的树状视图。
因此,只需查看其中的文件夹和文件。
icon.png:
这是您的NuGet包的图标文件。现在已将其嵌入.nupkg中,但在早期版本的NuGet中只能定义为url。
.nuspec
nuspec是关于nuget包的元数据文件。在早期版本中,它曾经用于打包nuget包。但是在新的dotnet CLI中,此文件是由roslyn编译器从您的.csproj文件生成的。它包括软件包的目标框架,名称,许可证,图标,标签,与其他包的依赖关系以及其中描述的要放置到添加的项目中的静态文件。
[Content_Types] .xml:
这是一个元数据文件,提供了程序包中包含的每个文件扩展名。
lib:
软件包的主文件夹。此文件夹包括您的构建输出。换句话说,它在构建之后包含了bin文件夹。所以您可以看到不同目标框架的文件夹与项目输出相同。例如,如果您的.csproj文件是多目标的,您可以像我一样看到每个目标框架的文件夹。
package:
此文件夹包含有关您的包的更多元数据文件。此数据与您在nuget软件包列表中看到的数据相同:“创建者”,“描述”,“标识符”,“版本”和“关键字”。
_rels / .rels:
这是xml格式的文件扩展名,由Microsoft创建和使用。您可以从此处查看有关.rels格式的更多信息。它主要用于Microsoft Office。
创建你的第一个库
每一个开发者都应该知道类库。它们很难移动或用于不同的项目。因为它们的输出是dll文件。在本文中,我不会谈论如何构建库。我将展示如何将它们转换为可移植的nuget包。因此,让我们从第一步开始。
1-选择目标框架
选择目标框架是非常重要!只需计划你的项目并定义依赖项即可。如果您的依赖项需要.net core(如实体框架)或以.Net core为目标的对象,只需将目标框架选为“.Net core”。但如果不是,请始终尝试在“.Net Standard”上构建库。顺便说一句,你可以建立一个多目标项目。您可以从此处阅读有关多目标项目的更多信息。
2-填充元数据
在我们所处的时代,MetaData是最重要的事情。MetaData可以更轻松地找到您的包裹并最好地描述其作用。因此,请正确填写您的元数据。在Visual Studio中创建类库后,只需右键单击并转到属性。您可以在“打包”标签下看到所有可以填写的字段。
如果您的环境不是Visual Studio,则可以直接修改.csproj文件,如下所示。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>My.Package</PackageId>
<Version>1.0.1</Version>
<Authors>enisn</Authors>
<Company>enisn</Company>
<Product>My Package</Product>
<Description>This is my packages description.</Description>
<Copyright>All rights reserved</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/enisn/MyPackage</PackageProjectUrl>
<RepositoryUrl>https://github.com/enisn/MyPackage</RepositoryUrl>
<PackageTags>my,awesome,package</PackageTags>
<PackageReleaseNotes>Hot fixes</PackageReleaseNotes>
</PropertyGroup>
</Project>
3-打包!
这就是奇迹发生的地方!准备好你的代码,右键单击您的项目,然后单击“打包”按钮。您的nupkg文件将在您项目的bin文件夹中等待着您。
如果您的开发环境不是Visual Studio,则可以使用命令提示符来执行此操作,如下所示:
dotnet pack My.Package.csproj
4-与全世界分享!
转到nuget.org并登录到你的帐户。然后导航到“发布”选项卡,并将您的.nupkg文件拖放到该页面中。填写有关包裹的信息字段并提交。仅此而已!这是在nuget.org上发布软件包的最简单方法。
使用命令行工具
但是您也可以在命令行下执行此操作。让我们来看看这种方式。
首先,您需要一个Api-Key与nuget API通信。转到nuget.org上的个人资料,然后找到“ API密钥”部分,如下所示。
创建一个API密钥并保存它。您将无法再次看到它。因此,您需要保存它。
现在,从打包开始,然后您可以通过CLI进行推送。
dotnet pack --configuration Release -o .packages/
这意味着在发布模式下构建项目,并将输出文件放置到“ .packages”文件夹中。因此,我们可以轻松地从.pacakges文件夹中找到输出。因此,您的nupkg文件已准备好推送。使用以下命令将软件包推送到nuget.org或您自定义的源:
dotnet nuget push .\.packages\My.Pacakge.1.0.1.nupkg --source [https://api.nuget.org/v3/index.json](https://api.nuget.org/v3/index.json) --api-key YOUR_API_KEY --skip-duplicate
我使用了 skip-duplicate
参数,因为如果要配置 CI
,则可以多次推送相同版本的软件包,而如果要推送已经存在的版本,则会出现错误,并且 CI-CD
进程将失败。因此,使用 skip-duplicate
参数忽略已存在的版本推送,并成功完成操作。
感谢您的阅读,我们下篇文章见!
翻译自:https://enisn.medium.com/how-to-develop-a-nuget-package-d37400d9e1d3
如何从零开发一个NuGet软件包?的更多相关文章
- 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)
本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...
- 【Nodejs】326- 从零开发一个node命令行工具
本文由 IMWeb 社区授权转载自腾讯内部 KM 论坛.点击阅读原文查看 IMWeb 社区更多精彩文章. 什么是命令行工具? 命令行工具(Cmmand Line Interface)简称cli,顾名思 ...
- 【原创】新手入门一篇就够:从零开发移动端IM
一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...
- 《IM开发新手入门一篇就够:从零开发移动端IM》
登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页 即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM 帖子 打赏 分享 发表评论162 想开 ...
- 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。
LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- 拥抱.NET Core,如何开发一个跨平台类库 (1)
在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...
- 使用 AngularJS 开发一个大规模的单页应用(SPA)
本文的目标是基于单页面应用程序开发出拥有数百页的内容,包括认证,授权,会话状态等功能,可以支持上千个用户的企业级应用. 下载源代码 介绍 (SPA)这样一个名字里面蕴含着什么呢? 如果你是经典的S ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)
文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...
随机推荐
- Java中的位掩码BitMask
目录 JDK源码的使用 日常工作中的使用 JDK源码的使用 最近在JDK源码中闲逛,无意中看到了java.lang.reflect.Modifier这个类,这个类很简单,都是些常量定义和判断方法,于是 ...
- leetcode 108 和leetcode 109
//感想:有时候啊,对于一道题目,如果知道那个点在哪,就会非常简单,比如说这两题,将有序的数组转换为二叉搜索树, 有几个点: 1.二叉搜索树:对于某个节点,它的左节点小于它,它的右节点大于它,这是二叉 ...
- gitlab private-token利用工具
在渗透测试中,经常会遇到只获得gitlab PRIVATE-TOKEN的情况,而gitlab提供了一系列的api给我们通过这个token去访问gitlab. 所以做了个简单的gitlab工具,以供紧获 ...
- 编程入门选什么语言好?C 语言还是Python ?为你解析
前面我分享过计算机行业已经成了学校选择排名第一,家长和学生都很看好计算机类专业.现在IT行业也越来越火爆,程序员越来越被人看好.面对相比同龄人高薪资的诱惑,人们很难不心动,即使秃头也值得! 那么问题来 ...
- Java类的组合
1 package 类的组合; 2 3 public class Clock { 4 private int hour,minute,second;//字段: 保存分秒数据 5 public void ...
- ubuntu 安装scapy
官网下载最新安装包:https://scapy.net/ 下载之后进入相应文件夹解压: 然后进入相关文件夹启动setup.py: 成功:
- 手写koa-static源码,深入理解静态服务器原理
这篇文章继续前面的Koa源码系列,这个系列已经有两篇文章了: 第一篇讲解了Koa的核心架构和源码:手写Koa.js源码 第二篇讲解了@koa/router的架构和源码:手写@koa/router源码 ...
- 问题:PyCharm调试方法Force Step over与step over的区别
Force Step over与step over的差别是,后者在执行到函数时,如果函数中设置了断点,会在该函数断点处暂停,等待进一步调试指令,而Force Step over不论函数中是否有断点,都 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的geometry几何属性
geometry属性保存部件相对于其父级对象的位置和大小,Qt实际上是以一个长方形来表示部件的位置和大小的,包括左上角的坐标位置.长度和宽带. 当部件的geometry调整时,部件如果可见将立即接收m ...
- [GXYCTF2019] MISC杂项题
buuoj复现 1,佛系青年 下载了之后是一个加密的txt文件和一张图片 分析图片无果,很讨厌这种脑洞题,MISC应该给一点正常的线索加部分脑洞而不是出干扰信息来故意让选手走错方向,当时比赛做这道题的 ...