包治百病 | 如何将一个.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. jsp+servlet怎么实现文件断点上传下载

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

  2. 记ubuntu sudo无法使用,su密码不对的解决办法

    前言 因为我有强制关机的习惯, 然后就杯具了.. ubuntu版本是 16.04 sudo没法使用, su密码不对, 顿时我就慌了 解决方案 1.1.开机点击ESC,进去GUN GRUB界面 1.2. ...

  3. Mac 安装 MongoDB 数据库

    1. 使用 brew install mongodb 安装 (参见下图) 2. 安装成功如下图 (成功与否可参考 方框内字符) 3. 启动 MongoDB 数据库 3.1 先创建数据库存储目录 /da ...

  4. 两类特殊的Nim游戏:Nim-K游戏与反Nim游戏

    Nim-K游戏 描述 有\(n\)堆石子,每次可从\(k\)堆石子中拿走任意数量的石子. 两个人轮流拿,谁不能拿谁输. 先手必胜条件 把\(n\)堆石子的石子数用二进制表示,统计每一个二进制位上\(1 ...

  5. Oracle rac11g 安装报INS41112

    由于集群服务器上的数据库存储层要上双活,所以需要重置存储 不幸17服务器在重启后突然奔溃了,所以需要重新安装17服务器系统 在把18的软件全都卸载干净后,重新安装集群服务器,但却遇到了如下问题 多次针 ...

  6. 7.并发编程--多线程通信-wait-notify

    并发编程--多线程通信-wait-notify 多线程通信:线程通信的目的是为了能够让线程之间相互发送信号; 1. 多线程通信: 线程通信的目的是为了能够让线程之间相互发送信号.另外,线程通信还能够使 ...

  7. js测试用

    一,大纲 二,目录二 三,目录三

  8. (C++C#类型互转工具)使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明

    在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL里面提供的函数的时候,总是被生成正确的C函数在C#中的正确声明而困扰,而生成C++中结构体在C#中的声明 - 天,没 ...

  9. ps 和 pstree的用法

    ps 查看某个具体的命令进程: ps -C cmd-name: 如: ps -C httpd // 如果有多个名字相同的进程, 如httpd... 应该是它下面的子进程, 这时会显示第一个进程id. ...

  10. Web - <a>标签中href="javascript:;"

    javascript: 是一个伪协议,其他的伪协议还有 mail:  tel:  file:  等等. 1 <a id="jsPswEdit" class="set ...