本文首发于 码友网 -- 《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程序包服务器》
如有什么问题,欢送评论区留言反馈。
如果你感觉本文有价值,请来个三连(点赞,珍藏,评论)吧,谢谢。