作者:依乐祝

首发地址: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软件包?的更多相关文章

  1. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...

  2. 【Nodejs】326- 从零开发一个node命令行工具

    本文由 IMWeb 社区授权转载自腾讯内部 KM 论坛.点击阅读原文查看 IMWeb 社区更多精彩文章. 什么是命令行工具? 命令行工具(Cmmand Line Interface)简称cli,顾名思 ...

  3. 【原创】新手入门一篇就够:从零开发移动端IM

    一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...

  4. 《IM开发新手入门一篇就够:从零开发移动端IM》

        登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页   即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM   帖子 打赏 分享 发表评论162     想开 ...

  5. 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。

    LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...

  6. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

  7. 拥抱.NET Core,如何开发一个跨平台类库 (1)

    在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...

  8. 使用 AngularJS 开发一个大规模的单页应用(SPA)

      本文的目标是基于单页面应用程序开发出拥有数百页的内容,包括认证,授权,会话状态等功能,可以支持上千个用户的企业级应用. 下载源代码 介绍 (SPA)这样一个名字里面蕴含着什么呢? 如果你是经典的S ...

  9. C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

    文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...

随机推荐

  1. 使用Camtasia来消除视频中的声音

    大多数情况下,我们在录制电脑屏幕的时候都会把音频输出也一起录制下来,但也会有时候要后期进行重新配音,需要把事先一同录制的音频消除掉,今天小编来给大家说一说如何消除这种的视频声音. 首先打开Camtas ...

  2. Vim注释行的方法

    目录 一.Visual block 加注释 去注释 二.正则表达式 加注释 去注释 一.Visual block 加注释 1.首先按键盘上的ESC进入命令行模式 2.再按Ctrl+V进入VISUAL ...

  3. 通俗解析莱文斯坦距离(Levenshtein Distance)计算原理(最小编辑距离)

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 最近看到一些动态规划的东西讲到莱文斯坦距离(编辑距离)的计算,发现很多都讲的 ...

  4. mysql一条sql语句如何执行的?

    mysql 一条sql语句如何执行的? 文章内容源自:极客时间-林晓彬老师-MySQL实战45讲 学习整理 在了解一条查询语句如何执行之前,需要了解下MySQL的基本架构是怎样的,如下图所示: 可以看 ...

  5. IdentityServer4系列 | 授权码模式

    一.前言 在上一篇关于简化模式中,通过客户端以浏览器的形式请求IdentityServer服务获取访问令牌,从而请求获取受保护的资源,但由于token携带在url中,安全性方面不能保证.因此,我们可以 ...

  6. Jmeter代理服务器录制脚本--浏览器拦截访问链接

    在 Jmeter性能测试的过程中您是否会遇到代理服务器无法打开浏览器,无法录制脚本的情况呢? 在测试过程中,我也遇到过这样的问题,希望能帮到正在找寻答案的你.... Jmeter录制脚本时,跟http ...

  7. MySQL 连接为什么挂死了

    声明:本文为博主原创文章,由于已授权部分平台发表该文章(知乎.云社区),可能造成发布时间方面的困扰. 一.背景 近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有 ...

  8. django和DRF的不同点

    django中封装了drf view 是 父类 class test1(View): def post(self,request): data=request.POST.get('name') ret ...

  9. 第15.47节、PyQt显示部件:QGraphicsView图形视图和QGraphicsScene图形场景简介及应用案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Graphics V ...

  10. pandas 标签映射成数值的几种方法

    1. preprocessing.LabelEncoder() import pandas as pd from sklearn import preprocessing le = preproces ...