C# NuGet
介绍
NuGet 是一个用于 .NET 平台的包管理器,用于轻松地添加、移除和管理项目中的依赖项。开发人员可以通过 NuGet 将第三方库、工具和资源添加到他们的项目中,以加速开发过程并提高生产力。
本文将详细介绍 NuGet 的基本概念、使用方法以及一些常用的 NuGet 命令和功能。
NuGet 的基本概念
在深入了解 NuGet 的使用方法之前,先了解一些基本概念是非常重要的。
1. 包(Package)
NuGet 中的包是以文件的形式分发的软件组件或资源的集合。包可以包含编译后的二进制文件、配置文件、文档和其他资源文件。
在 NuGet 仓库中,有一个巨大的包集合,开发人员可以从中获取所需的包。同时也可以将自己的代码打包成包,并上传到 NuGet 服务器,以供他人使用。
2. 仓库(Repository)
NuGet 仓库是包的集合地。NuGet 提供了一个官方仓库(https://www.nuget.org/),同时也可以搭建自己的私有仓库。
在使用 NuGet 安装包的时候,默认情况下会从官方仓库中下载,也可以通过配置指定其他的仓库地址。
3. 依赖(Dependency)
包可以依赖于其他包。当一个包依赖于其他包时,安装该包时,NuGet 会自动管理这些依赖关系,并确保安装了所有相关的包。
例如,如果项目 A 依赖于项目 B,那么在安装项目 A 时,NuGet 会自动安装项目 B。
NuGet 的安装和配置
如果你使用的是 Visual Studio 2017 或更高版本,NuGet 已经默认安装并集成在其中了,你不需要进行额外的安装操作。
如果你使用的是较低版本的 Visual Studio,可以通过以下步骤安装 NuGet:
- 打开 Visual Studio 并选择菜单栏中的 “工具” -> “扩展和更新”。
- 在弹出的窗口中,选择 “联机” 选项。
- 在搜索框中输入 “NuGet”,找到 “NuGet 包管理器” 并点击 “下载”。
- 下载完成后,点击 “重启以完成安装”。
安装完成后,NuGet 包管理器窗口将会出现在 Visual Studio 的 “工具” 菜单中。
配置 NuGet 源
默认情况下,Visual Studio 使用官方 NuGet 源来安装和更新包。然而在一些情况下,你可能需要使用其他的 NuGet 源。
你可以在 Visual Studio 中配置 NuGet 源的步骤如下:
- 打开 Visual Studio 并选择菜单栏中的 “工具” -> “选项”。
- 在弹出的窗口中,展开 “NuGet 包管理器” 选项,并选择 “程序包源”。
- 点击右侧的 “+” 按钮,添加一个新的源。
- 在 “源名称” 输入框中输入源的名称,例如 “My Private Source”。
- 在 “源” 输入框中输入源的 URL。
- 点击 “确定” 保存配置。
经过以上步骤,你可以在 NuGet 包管理器中选择新添加的源。
使用 NuGet
NuGet 提供了多种方式来使用和管理包,本节将介绍其中常用的几种方式。
1. 使用 NuGet 窗口
在 Visual Studio 中,使用 NuGet 最简单的方式就是通过 “NuGet 包管理器” 窗口。
要打开 “NuGet 包管理器” 窗口,打开 Visual Studio,并选择菜单栏中的 “工具” -> “NuGet 包管理器” -> “程序包管理器控制台”。
在打开的窗口中,你可以通过搜索框搜索所需的包,然后点击 “安装” 按钮来安装包。你也可以手动输入 Install-Package PackageName
命令来安装包。
例如,要安装常用的 Json 库 Newtonsoft.Json
,你可以在控制台中输入以下命令:
Install-Package Newtonsoft.Json
2. 使用 Package Manager Console
Package Manager Console 是 Visual Studio 提供的一个命令行工具,可以快速执行 NuGet 命令。
要打开 Package Manager Console,打开 Visual Studio 并选择菜单栏中的 “工具” -> “NuGet 包管理器” -> “程序包管理器控制台”。
在 Package Manager Console 中,你可以输入各种 NuGet 命令来安装、更新、删除和管理包。
例如,要安装 Newtonsoft.Json
,你可以使用以下命令:
Install-Package Newtonsoft.Json
3. 使用 .NET CLI
.NET CLI 是 .NET 跨平台开发工具的一部分,可以用于跨平台的 NuGet 包管理。
要使用 .NET CLI 安装 NuGet 包,需要打开命令行终端,切换到项目的根目录,然后执行以下命令:
dotnet add package PackageName
例如,要安装 Newtonsoft.Json
,你可以使用以下命令:
dotnet add package Newtonsoft.Json
NuGet 命令和功能
NuGet 提供了丰富的命令和功能,以便开发人员更好地管理包和项目。
常用的 NuGet 命令
Install-Package
:安装包。Uninstall-Package
:卸载已安装的包。Update-Package
:更新包的版本。Get-Package
:获取项目中已安装的包。Add-Migration
:向 Entity Framework Core 项目中添加新的迁移记录。
创建和发布 NuGet 包
要创建和发布自己的 NuGet 包,可以使用以下步骤:
- 创建一个类库项目,并将你的代码添加到其中。
- 在项目中添加一个
.nuspec
文件,该文件包含有关包的元数据,例如包的名称、版本、作者等信息。 - 使用 NuGet 命令行工具或 Visual Studio 的 “NuGet 包管理器” 窗口,将项目打包成
.nupkg
文件。 - 注册一个 NuGet 账户,并将
.nupkg
文件上传到 NuGet 服务器。 - 在发布时,确保你的包符合 NuGet 的规范,并提供有关使用该包的文档。
工具包引用和目标框架(PackageReference and Target Frameworks)
在 .NET Core 和 .NET Standard 中,推荐使用 PackageReference 来引用 NuGet 包在传统的 .NET Framework 项目中,使用的是 packages.config 文件来管理包的引用。而在 .NET Core 和 .NET Standard 项目中,使用 PackageReference 来管理包的引用。
使用 PackageReference 有以下几个优点:
- XML 文件更简洁:相比于 packages.config,PackageReference 的 XML 文件更加简洁和易读。它只需要一个
<PackageReference>
元素来引用一个包,而不需要一长串的<package>
元素。 -
适用于多目标框架:PackageReference 可以在一个项目中针对多个目标框架引用不同的包。例如,一个项目可以同时针对 .NET Standard 和 .NET Framework 进行编译,使用不同的包引用。
-
支持自动恢复:PackageReference 支持自动恢复,即当项目迁移到其他计算机时,可以自动从 NuGet 源下载并还原所有的包。
要在项目中使用 PackageReference,可以按照以下步骤进行设置:
- 打开项目文件(例如 .csproj 文件)。
- 删除
<ItemGroup>
中的所有<PackageReference>
和<Reference>
元素。 - 在
<ItemGroup>
中添加一个<PackageReference>
元素来引用需要的包。例如:<ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> </ItemGroup>
- 保存文件并重新加载项目。
NuGet Package Manager Console 命令
除了前面提到的常用 NuGet 命令以外,NuGet Package Manager Console 还提供了一些特定的命令和功能,用于项目的构建和管理。
以下是一些常用的 NuGet Package Manager Console 命令:
Add-Migration
:向 Entity Framework Core 项目中添加新的迁移记录。例如:Add-Migration InitialCreate
Update-Database
:将 Entity Framework Core 数据库迁移到最新的迁移记录。例如:Update-Database
Enable-Migrations
:为传统的 Entity Framework 项目启用迁移支持。例如:Enable-Migrations
Install-PackageProvider
:安装 NuGet 包提供程序。例如:Install-PackageProvider -Name NuGet -Force
Install-Script
:在 Package Manager Console 中安装一个 PowerShell 脚本。例如:Install-Script -Name PackagePublisher -Force
NuGet 版本控制
在使用 NuGet 时,可以通过指定版本来控制包的更新和使用。
NuGet 使用 Semantic Versioning(语义化版本控制)来标识和管理包的版本。版本号由三个数字组成:主版本号、次版本号和修订号。
- 主版本号:当你做了不兼容的 API 修改时,应增加主版本号。
- 次版本号:当你添加了向后兼容的功能时,应增加次版本号。
- 修订号:当你进行向后兼容的错误修复时,应增加修订号。
在安装和更新包时,可以通过指定版本号来控制使用的包。例如,要安装特定版本的 Newtonsoft.Json
,可以使用以下命令:
Install-Package Newtonsoft.Json -Version 12.0.3
如果不指定版本号,则 NuGet 默认会安装最新的版本。
总结
NuGet 是一个强大而方便的包管理器,可以帮助开发人员轻松地添加、移除和管理项目中的依赖项。通过使用 NuGet,开发人员可以更快地开发应用程序,并且可以快速集成和使用各种第三方库和工具。
本文详细介绍了 NuGet 的基本概念、安装和配置方法,以及常见的使用方式和命令。