包治百病 | 如何将一个.NET Core类库发布到NuGet

包治百病 | 如何将一个.NET Core类库发布到NuGet

Edi Wang发表于汪宇杰博客订阅
77

NuGet是.NET世界的包管理器,有官方的nuget.org,也允许构建公司和私人的服务器。在.NET Core的时代,封装一个NuGet包比以往更容易,我们来看看吧!

NuGet账号

如果你想和微软一起予力众生,让全世界的.NET程序员都能用上你的包,远离996,那么你就需要有个nuget.org的账号,用来上传自己的包。

nuget.org可以用微软账号直接登录,免去注册的麻烦。

登录以后,建议大家先去搞一套API Key,并记在OneNote里,虽然本文讨论的范围内不需要使用这套Key,但如果以后你希望通过NuGet CLI或自动化工具(如Azure DevOps)发布NuGet包的话,就用得上它

使用 VS2019 创建NuGet包

以我的一个类库Edi.Blog.Pingback为例,开发完成以后,在项目文件上点右键,打开属性对话框。

Package选项卡中,勾选 Generate NuGet package on build

并且填写一些必要信息。Package id 是最重要的,即最终用户安装你的NuGet包时,使用的ID。这和Product是不一样的。最经典的例子就是Json.NET,它的Package id是Newtonsoft.Json,而不是Json.NET。一般为了避免混淆的情况,我建议大家保持Package id和Product名称一致。

其次是版本号,Package version是最终会显示在nuget.org网页上的版本,也是通过NuGet CLI指定安装版本时候所用的版本。为了避免混淆,也建议与Assembly/File version保持一致。

其他信息可以根据需要填写,越详细越好。比如我的这个包,是在NuGet用MIT协议开源的,我就可以填写仓库地址(Repository URL),以及协议。就算不是开源的包,也建议大家填写协议。不然最终上传nuget.org之后,会报一个警告。

其实在VS界面上进行的这些操作,最终是反映到工程文件里的(Edi.Blog.Pingback.csproj),也就是说,如果你是个VSCode党,也可以通过手工编辑工程文件的方式来完成这一系列的设置。

<PropertyGroup>

<TargetFramework>netcoreapp2.2</TargetFramework>

<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

<Authors>Edi Wang</Authors>

<Company>edi.wang</Company>

<Description>Pingback sender and receiver used in my blog system.</Description>

<RepositoryUrl>https://github.com/EdiWang/Edi.Blog.Pingback</RepositoryUrl>

<PackageProjectUrl>https://edi.wang</PackageProjectUrl>

<AssemblyVersion>10.1.0.0</AssemblyVersion>

<FileVersion>10.1.0.0</FileVersion>

<Version>10.1.0</Version>

<PackageTags>Blog, Pingback</PackageTags>

<PackageLicenseExpression>MIT</PackageLicenseExpression>

</PropertyGroup>

接下来,切换到Release模式编译一把,就可以在bin\release下生成一个nupkg格式的包了!使用Release是因为面对的是生产环境,希望最终用户使用编译器优化过的dll。

// 其实,一个NuGet包可以同时包含Release和Debug两个版本的dll,不在本文讨论范围内。

上传到 nuget.org

最简单的方式,是通过网页上传。在nuget.org的用户菜单下面,选择Upload Package

据说我们.NET程序员都是拖控件的,所以我们只能把刚才编译出来的nupkg文件拖到网页中,完成上传。

在确认信息无误后,点击页面最下方的 Submit 按钮提交审核。

接下来,你会看到审核的状态。最初是 Validating,审核通过后会变成 Listed。一般5分钟就可以。

但是在Listed之后,还是会有一个警告,意思是服务器的索引还没建完,用户搜不到该版本的包。如果心急,可以等到显示Listed后,通过NuGet CLI或者编辑project文件,指定具体版本号去安装。

等警告消失后,你的包就完完整整的ready了!赶紧向全世界分享你的成果吧~

相关工具推荐

NuGet命令行工具:https://www.nuget.org/downloads

NuGet Package Explorer,Windows下的可视化NuGet包编辑器,可以解剖、编辑、上传NuGet包:https://www.microsoft.com/store/productId/9WZDNCRDMDM3

原文发布于微信公众号 - 汪宇杰博客(ediwangblog)

原文发表时间:2019-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于 2019-07-092019-07-09 10:11:25
分享
  • 分享文章到朋友圈

  • 分享文章到 QQ
  • 分享文章到微博
  • 复制文章链接到剪贴板
扫描二维码

扫码关注云+社区

领取腾讯云代金券

我来说两句

0 条评论
登录 后参与评论

如何将一个.NET Core类库发布到NuGet的更多相关文章

  1. 使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理

    本章将和大家简单分享下如何使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理. 一.注册并登录NuGet平台 NuGet官网:http ...

  2. .Net Core利用反射动态加载类库的方法(解决类库不包含Nuget依赖包的问题)

    在.Net Framework时代,生成类库只需将类库项目编译好,然后拷贝到其他项目,即可引用或动态加载,相对来说,比较简单.但到了.Net Core时代,动态加载第三方类库,则稍微麻烦一些. 一.类 ...

  3. .NET Core 从 Github到 Nuget 持续集成、部署

    一.前言 Nuget 作为一个.NET研发人员,我想你都不会陌生,他为我们提供非常方便的程序包管理,不管是版本,还是包的依赖都能轻松应对,可以说是我们的好助手.而 Nuget 除了官方nuget.or ...

  4. 记一次结巴分词.net core 2.0版 nuget发布过程

    最近用到分词考虑很久,选用了结巴分词,原因见博客Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考 既然选好了,难就开始行动吧 . 查了.ne ...

  5. 10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)

    前言 NuGet就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),以及一个用于存储所有包的中心库. 对于一个现代 ...

  6. 发布自己的类库包到Nuget

    今天来记录下发布自己的类库到Nuget. 一.准备工作 注册www.nuget.org,获取APIKey 后面发布要使用到. 二.创建项目 新建类库项目 新建测试demo类 public class ...

  7. nuget服务器搭建,以及如何发布一个Nuget包

    本文章主要介绍如何将本地dll打包成为一个Nuget包,并如何发布到自己的nuget服务器.章节如下 1. 本地dll如何打包,以及版本的更新 2. 在linux上搭建nuget.server 3. ...

  8. [.Net] 手把手带你将自己打造的类库丢到 NuGet 上

    手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...

  9. .NET Core 跨平台发布(dotnet publish)

    .NET Core 跨平台发布(dotnet publish) ,无需安装.NET Core SDK,就可以运行. 前面讲解了.NET Core 的VSCode 开发.现在来讲讲发布(dotnet p ...

随机推荐

  1. mysql FIRST()函数 语法

    mysql FIRST()函数 语法 作用:返回指定的字段中第一个记录的值.直线电机选型 语法:SELECT FIRST(column_name) FROM table_name 注释:可使用 ORD ...

  2. java 上传大文件以及文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  3. sweetalert2 全面替代 alert ,从 sweetalert2 弹出 text 到 弹出 Dom 以及模态框和取消 sweetalert2 的 OK 按钮

    1. 简易基本版 sweetalert 涵盖日常基本的弹出及对话框 2. 升级版本 sweetalert2 满足常见开发工作中的各种要求 3 取消 OK 按钮, 只需要设置 showConfirmBu ...

  4. Pycharm,出现Invalid VCS root mapping The directory 解决方法

    Pycharm File 中setting-------version control  中VCS选择none  后选择ok 执行完以上的步骤,还错误就会消失.

  5. 原型模式故事链(4)--JS执行上下文、变量提升、函数声明

    上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~ ...

  6. 尚硅谷Docker---docker安装及简介

    尚硅谷Docker---docker安装及简介 一.总结 一句话总结: docker就相当于是一个极微型的linux系统,独立 1.使用Docker的步骤? 1).安装Docker 2).去Docke ...

  7. VBA通过C#以API方式调用JS脚本函数

    http://www.cnblogs.com/Charltsing/p/JSDotNetAPI.html 在网页采集中,很多时候需要运行网站下载的某个js文件中的函数,以计算Request参数.VBA ...

  8. PDF to PNG to PDF

    PDF to PNG to PDF PDF 2 PNG step 1, install PyMuPDF pip install pymupdf -i http://mirrors.aliyun.com ...

  9. 十三、RF中对json的解析

    A.需要安装的库 1.RequestsLibrary,安装命令:pip2 install requests 2.HttpLibrary,安装命令:pip2 install robotframework ...

  10. Django学习之Form表单

    一.Form介绍 普通方式手写注册功能 使用form组件实现注册功能 二.Form那些事儿 1.常用字段与插件 initial error_messages password radioSelect ...