本文首发于 码友网 -- 《NuGet是什么?为什么.NET我的项目中会有NuGet?如何应用NuGet程序包?》

概述

大家好,我是专一.NET开发的码友网创建者Rector

在.NET应用程序编程开发中,开发者通常应用类库来治理、保护属于同一分类的程序代码,以便代码的重用。个别状况下,处于同一类库的所有类都位于同一程序集。

这些类库被编译器编译后会生成扩大名为.dll的动态链接库文件,你能够在其它我的项目中通过援用的形式导入这些.dll程序集并应用其中被封装的类及成员。

但随着我的项目越来越大、越来越多,应用手动援用.dll动态链接库的形式让程序包治理和保护变得十分艰难。在这种状况下,NuGet程序包管理工具便应运而生。

NuGet程序包就好比前端开发中的npm包,Java开发中的Maven或者Gradle,它们都是治理本人语言畛域的程序依赖包的工具。负责管制程序包版本,保护包与包之间的依赖,有了包管理工具,你能够疾速地安装包,还原包等。

在正式接触NuGet程序包工具前,先来一步一步回顾.NET我的项目中程序包引入的进化历。

引入程序集的形式

引入程序集的形式有多种,如:

  • 程序集在同一个解决方案,间接援用我的项目
  • 程序集在本地磁盘,浏览.dll文件引入
  • NuGet程序包管理工具装置

1.援用我的项目形式

如果以后有一个名为NugetDemo.Payment的类库我的项目和一个名为ConsoleApp的控制台应用程序,现须要在ConsoleApp我的项目中通过援用我的项目的形式引入NugetDemo.Payment,办法如下:

1.右键单击依赖项,点击增加我的项目援用,如图:

2.在弹出的援用管理器窗口中选中NugetDemo.Payment,点击确定,如图:

3.Visual Studio将把选中的我的项目增加到以后我的项目的依赖项->我的项目列表,如图:

2.浏览文件形式

还是在ConsoleApp我的项目中,如果有另外一个支付宝的程序集,如图:

1.还是按归援用我的项目的形式,右键单击依赖项,点击增加我的项目援用

2.在弹出的援用管理器窗口选中浏览,如图:

3.再点击右下角的浏览按钮,在文件资源管理器中找到方才筹备的Ali.Alipay.dll文件,如图:

4.抉择后点击右下角的增加按钮,将主动回到如下界面:

5.选中方才浏览的Ali.Alipay.dll,最初点击右下角的确定按钮,Visual Studio将会把这个.dll文件增加到以后我的项目的依赖项->程序集列表中,如图:

无可非议,以上的两种援用程序集的形式在后果上是没有问题的。但这种形式只适宜集体我的项目,当你的团队成员或者团队我的项目达到一定量级之后,程序集的治理、保护、版本控制等问题会让你头疼。

到最初,你可能不晓得以后援用的程序集是哪个版本?在哪里能够找到正确的程序集版本?它们之间的依赖关系是怎么样的?如果共享程序集?

有了NuGet程序包之后,这些问题就迎刃而解。

NuGet程序包

NuGet程序包是微软为.NET(包含.NET Core)平台提供的程序集共享包。

简略地说,NuGet包是一个扩大名为.nupkg的ZIP文件,其中蕴含了已编译代码(.dll)与该代码相干的其余文件,以及包版本号等信息的形容信息。

开发人员能够创立代码共享的程序包并将其公布到公共或公有主机。包使用者从适合的主机取得这些包,将它们增加到他们的我的项目中,而后在他们的我的项目代码中调用包的性能。而后NuGet本人解决所有两头细节(包含装置、卸载、依赖关系保护,版本控制等)。

微软官网为公共的.NET共享程序包提供专门的私有托管服务,地址为: https://www.nuget.org/

目前有超过25万的程序包被分享在这里,如图:

NuGet除了反对公共的nuget.org主机外还反对公有主机,所以你能够搭建集体或者公司外部的NuGet公有服务器,以达到外部分享程序包的目标。

NuGet程序包的装置和卸载

治理NuGet程序包的形式有多种,其中最罕用的别离为:一、通过NuGet包管理器;二、通过命令行治理。其中NuGet包管理器是Visual Studio或者Rider这样的集成开发环境才具备的客户端管理工具。

上面以Visual Studio 2022 预览版(17.0.0 Preview 3.1)为例演示。

NuGet包管理器

装置NuGet

如果以后有一个基于.NET 5的控制台应用程序,构造如下:

现须要在这个控制台中装置Newtonsoft.Json以便进行json序列化和反序列化操作。那么,咱们能够通过右键依赖项 -> 治理NuGet程序包来关上NuGet包管理器,如下图:

而后抉择浏览选项卡,并在搜寻框中键入关键词,在搜寻后果中选中须要装置的程序包,最初点击右侧的装置按钮,如下:

在弹出的对话框中,点击确定按钮:

Visual Studio将主动下载选中的程序包及其依赖包,并将其增加到以后我的项目的依赖项中,如下图:

当初,能够在这个ConsoleApp1我的项目中调用Newtonsoft.Json组件所有可拜访的性能了,以下示例演示了利用Newtonsoft.Json将一个json字符串反序列化成实体对象,代码如下:

using Newtonsoft.Json;class Program{    static void Main(string[] args)    {        // 模仿一个JSON字符串        var json = "{\"id\":1,\"name\":\"Rector\",\"age\":18}";        // 调用JsonConvert.DeserializeObject<T>()泛型办法反序列化        var person = JsonConvert.DeserializeObject<Person>(json);        Console.WriteLine(person.ToString());        Console.ReadKey();    }}/// <summary>/// 定义一个与JSON字符串字段匹配的实体类/// </summary>public class Person{    public int Id { get; set; }    public string Name { get; set; }    public short Age { get; set; }    /// <summary>    /// 重写ToString()办法    /// </summary>    /// <returns></returns>    public override string ToString()    {        return $"id:{Id},name:{Name},age:{Age}";    }}

运行后果如下图:

NuGet包版本治理

NuGet包有版本之分,不同的版本以版本号作为标识,比方下面装置的Newtonsoft.Json程序包,装置的时候抉择了以后的最新版本(13.0.1),如图:

这个下拉列表列出了Newtonsoft.Json程序包所有可用的版本号,通过抉择不同版本号即可装置不同版本的Newtonsoft.Json程序包,也能够通过这个版本下拉列表实现NuGet程序包版本的升/降级

比方,以后咱们曾经装置了版本13.0.1,那么,抉择任意一个比它版本号小的即为降级,比方这里抉择降级为12.0.3,点击更新按钮即可实现降级。

同理,抉择任意一个比以后版本号大的版本,即可实现降级版本的操作。

问:NuGet包为什么会有不同的版号呢?

答:NuGet的版本号作为不同版本的标识。一个NuGet包的性能在一直地欠缺和扩大,每次对NuGet包进行迭代(可能是修复bug,也可能是新增性能),都会为其指定不同的版本号(通常这个版本号是向上累加的),不同版本之间互相独立、互不影响。

NuGet包卸载

有装置就有卸载,如果某个我的项目不再须要某个NuGet程序包,则能够通过NuGet包管理器中的卸载按钮来一键卸载掉指定的NuGet程序包(其依赖的程序包也会被一并卸载),如图:

卸载Newtonsoft.Json包后,下面演示的反序列化示例代码在编译报错了,如图:

NuGet命令行

除了NuGet包管理器外,还可应用NuGet命令行来装置。

首先,关上NuGet的官网: https://www.nuget.org/ ,在搜寻框中键入要查找的NuGet包关键字(这里演示Newtonsoft),点击搜寻按钮,如图:

在搜寻后果列表中点击符合要求的程序包(Newtonsoft.Json),如图:

进入到Newtonsoft.Json的详情页面,此页面展现了程序包的详细信息,如:命令行、依赖、被其余我的项目应用列表,历史版本列表,根本信息等等,如图:

程序包管理器控制台命令

装置NuGet包

首先,演示程序包管理器控制台,复制其中的程序包管理器控制台命令:

Install-Package Newtonsoft.Json -Version 13.0.1

在Visual Studio中,关上程序包管理器控制台,如图:

将命令粘贴在程序包管理器控制台中,并将默认我的项目设置为以后我的项目(如果一个解决方案中有多个我的项目时,需仔细检查此下拉框选中的我的项目),按回车键执行命令。

命令执行后果如图:

程序包管理器控制台命令形式装置NuGet程序包胜利。

更新NuGet包

程序包管理器控制台中,同样能够更新NuGet包。

你能够获取查看以后我的项目已安装包是否有新版本,命令如下:

Get-Package -updates

更新指定包到指定版本,命令如下:

Update-Package Newtonsoft.Json -Version 13.0.1

更新我的项目的指定包到指定版本,命令如下:

Update-Package Newtonsoft.Json -Version 13.0.1 -ProjectName ConsoleApp1

更新以后解决方案的所有程序包到最新版本,命令如下:

Update-Package

卸载NuGet包

程序包管理器控制台中,还能够卸载NuGet包。

卸载默认我的项目的指定程序包,命令如下:

Uninstall-Package Newtonsoft.Json

卸载默认我的项目的指定程序包,同时卸载未应用的依赖包,命令如下:

Uninstall-Package Newtonsoft.Json -RemoveDependencies

强制卸载默认我的项目的指定程序包(即便其余程序包依赖于它),命令如下:

Uninstall-Package Newtonsoft.Json -Force

.NET CLI治理NuGet包

要应用.NET CLI工具,须要装置.NET Core SDK。如果已装置Visual Studio 2017及以上版本,则.NET CLI工具会主动装置。

在应用命令行治理NuGet包时,请在命令行中定位到我的项目所在根目录。

装置Nuget包

应用.NET CLI装置Newtonsoft.Json包的命令如下:

dotnet add package Newtonsoft.Json --version 13.0.1

命令执行如下:

卸载Nuget包

卸载Newtonsoft.Json包的命令如下:

dotnet remove package Newtonsoft.Json

下一篇介绍《1分钟极速搭建基于BaGet的轻量级公有Nuget程序包服务器》

如有什么问题,欢送评论区留言反馈。

如果你感觉本文有价值,请来个三连(点赞,珍藏,评论)吧,谢谢。