关于.net:NuGet是什么为什么NET项目中会有NuGet如何使用NuGet程序包

80次阅读

共计 4614 个字符,预计需要花费 12 分钟才能阅读完成。

本文首发于 码友网 —《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 程序包服务器》

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

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

正文完
 0