2020-12-23

依乐祝
依乐祝
授之以鱼,不如授之以渔!右侧微信扫描二维码关注我们“DotNetCore实战”吧。另附.NET Core实战项目交流群:637326624 欢迎大家加群相互交流!

博客园 首页 新随笔 联系 订阅 管理随笔 - 108 评论 - 1595
如何从零开发一个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文件,如下所示。

netstandard2.0 My.Package 1.0.1 enisn enisn My Package This is my packages description. All rights reserved MIT https://github.com/enisn/MyPackage https://github.com/enisn/MyPackage my,awesome,package Hot fixes 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 --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

作者:依乐祝(祝雷)
出处:https://www.cnblogs.com/yilezhu
联系:1015657114@qq.com .NET Core实战项目交流群:637326624 微信:jkingzhu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
DotNetCore实战
分类: .NET Core, asp.net core
标签: asp.net core
好文要顶 关注我 收藏该文
依乐祝
关注 - 33
粉丝 - 981
+加关注
3 0
« 上一篇: 一个小技巧助您减少if语句的状态判断
posted @ 2020-12-23 07:37 依乐祝 阅读(252) 评论(3) 编辑 收藏

评论列表
#1楼 2020-12-23 07:50 我叫锄头
mark
支持(0) 反对(0)
#2楼 2020-12-23 08:43 星星点灯6
支持一个!!
支持(0) 反对(0)
#3楼 [楼主] 2020-12-23 10:26 依乐祝
@星星点灯6
@我叫锄头
感谢支持
支持(0) 反对(0)
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
写给园友们的一封求助信
专注实战 • 分享技巧 • 提升技术
扫描二维码关注『DotNetCore实战』公众号
关注公众号:DotNetCore实战
.NET Core微服务实战教程
微信扫描二维码『免费试看』
.NET Core微服务实战教程
.NET Core实战项目交流群:
637326624
.NET Core项目实战交流群

微信号:jkingzhu(请备注博客园)
所在地:安徽 合肥

昵称: 依乐祝
园龄: 2年8个月
粉丝: 981
关注: 33
+加关注
< 2020年12月 >
日 一 二 三 四 五 六
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
我的标签

asp.net core(62)
Net Core(25)
CMS系统(18)
.NET Core实战项目(11)
Ocelot(7)
MongoDB(5)
Serilog(4)
DOT(4)
EndPoint(4)
.Net Core3.0(3)
更多
积分与排名

积分 - 271837
排名 - 2031
随笔分类 (206)

.NET Core(48)
.NET Core实战项目(21)
asp.net core(73)
C#语法(5)
CMS系统(18)
Dapper(2)
Exceptionless(2)
GRPC(3)
Linux(2)
MediatR(1)
MongoDb(4)
NPOI(1)
Ocelot(8)
Oracle(2)
Redis(3)
更多
.NET Core

金焰的世界
Edison Zhou
最新评论

  1. Re:ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
    @积山海 // 注册Swagger服务 services.AddSwaggerGen(c ⇒ { // 添加文档信息 c.SwaggerDoc(“v1”, new Microsoft.OpenApi…
    –沫涵

  2. Re:如何从零开发一个NuGet软件包?
    @星星点灯6 @我叫锄头 感谢支持…
    –依乐祝

  3. Re:如何从零开发一个NuGet软件包?
    支持一个!!
    –星星点灯6

  4. Re:如何从零开发一个NuGet软件包?
    mark
    –我叫锄头

  5. Re:在ASP.NET Core中创建内部使用Scoped服务的Quartz.NET宿主服务
    我想明白了 谢谢
    –yjq_net
    阅读排行榜

  6. 使用Visual Studio Code开发.NET Core看这篇就够了(75856)

  7. mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法(54839)

  8. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了(49458)

  9. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划(39094)

  10. C# 中的Async 和 Await 的用法详解(32412)

  11. VS2017 无法连接到Web服务器“IIS Express”终极解决方案(16460)

  12. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了(16168)

  13. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入(13575)

  14. 目前下载VS2017你可能会遇到这个坑(13318)

  15. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程(12518)
    评论排行榜

  16. 一份来自28岁老程序员的自白(85)

  17. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了(61)

  18. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划(51)

  19. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程(51)

  20. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入(49)

  21. 祝雷(依乐祝):一份来自29岁.NET老程序员的自白(48)

  22. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了(48)

  23. 使用Visual Studio Code开发.NET Core看这篇就够了(46)

  24. What?VS2019创建新项目居然没有.NET Core3.0的模板?Bug?(44)

  25. 2019年的第一场雪来的既猛又烈,突然想分享点东西(38)
    推荐排行榜

  26. 使用Visual Studio Code开发.NET Core看这篇就够了(104)

  27. .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了(90)

  28. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了(87)

  29. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划(86)

  30. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入(79)
    Copyright © 2020 依乐祝
    Powered by .NET 5.0.1-servicing.20575.16 on Kubernetes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值