使用 NuGet 包管理器在 Visual Studio 中安装和管理包

通过 Windows 版 Visual Studio 中的 NuGet 包管理器 UI,可轻松安装、卸载和更新项目和解决方案中的 NuGet 包。 若要了解 Visual Studio for Mac 的使用体验,请参阅在项目中包括 NuGet 包。 Visual Studio Code 中不包含包管理器 UI。

注意

如果 Visual Studio 2015 中缺少 NuGet 包管理器,请选中“工具”>“扩展和更新...”并搜索“NuGet 包管理器”扩展。 如果无法在 Visual Studio 中使用扩展安装程序,请直接从 https://dist.nuget.org/index.html 下载扩展。

从 Visual Studio 2017 开始,NuGet 和 NuGet 包管理器会与任何 .NET 相关的工作负载一起自动安装。 通过在 Visual Studio 安装程序中选择“单个组件”>“代码工具”>“NuGet 包管理器”选项,可以单独安装它。

查找和安装包

  1. 在“解决方案资源管理器”中,右键单击“引用”或某个项目,然后选择“管理 NuGet 包...”。

    Manage NuGet Packages menu option

  2. “浏览”选项卡按当前所选来源的受欢迎程度显示包(请参阅包源)。 使用左上角的搜索框搜索特定包。 从列表中选择一个包以显示其信息,此操作还会启用“安装”按钮以及版本选择下拉列表。

    Manage NuGet Packages Dialog Browse tab

  3. 从下拉列表中选择所需的版本,然后选择“安装”。 Visual Studio 随即将包及其依赖项安装到项目中。 系统可能会要求你接受许可条款。 安装完成后,添加的包将显示在“已安装”选项卡上。包同时还列在解决方案资源管理器的“引用”节点中,表明可以使用 using 语句在项目中引用它们。

    References in Solution Explorer

提示

若要在搜索中包含预发布版本,并在版本下拉列表中提供预发布版本,请选中“包含预发布版本”选项。

注意

NuGet 提供项目可使用包的两种格式:PackageReferencepackages.config默认项可以在 Visual Studio 的选项窗口中设置

卸载包

  1. 在“解决方案资源管理器”中,右键单击“引用”或所需项目,然后选择“管理 NuGet 包...”

  2. 选择“已安装”选项卡。

  3. 选择要卸载的包(如有必要,使用搜索来筛选列表)并选择“卸载”

    Uninstalling a package

  4. 请注意,在卸载包时,“包含预发布版本”和“包源”控件无效。

更新包

  1. 在“解决方案资源管理器”中,右键单击“引用”或所需项目,然后选择“管理 NuGet 包...”。(在网站项目中,右键单击“Bin”文件夹。)

  2. 选择“更新”选项卡,查看所选包源中包含可用更新的包。 选中“包含预发布版本”,以便在更新列表中包含预发布版本的包。

  3. 选择要更新的包,从右侧的下拉列表中选择所需的版本,然后选择“更新”

    Updating a package

  4. 对于某些包,“更新”按钮处于禁用状态,并显示一条消息,指示它是“由 SDK 隐式引用”(或“AutoReferenced”)。 此消息表明该包是较大框架或 SDK 的一部分,不能单独更新。 (此类包在内部标有 <IsImplicitlyDefined>True</IsImplicitlyDefined>。)例如,Microsoft.NETCore.App 是 .NET Core SDK 的一部分,并且包版本与应用程序使用的运行时框架的版本不同。 需要更新 .NET Core 安装以获取新版本的 ASP.NET Core 和 .NET Core 运行时。 请参阅本文档,详细了解 .NET Core 元包和版本控制。 这适用于以下常用包:

    • Microsoft.AspNetCore.All
    • Microsoft.AspNetCore.App
    • Microsoft.NETCore.App
    • NETStandard.Library

    Example package marked as Implicitly references or AutoReferenced

  5. 若要将多个包更新到其最新版本,请在列表中选中它们,然后选择列表上方的“更新”按钮。

  6. 还可以从“已安装”选项卡更新各个包。在这种情况下,包的详细信息包括版本选择器(受“包含预发布版本”选项的约束)和“更新”按钮。

管理解决方案的包

管理解决方案的包是同时处理多个项目的便捷方式。

  1. 选择“工具”>“NuGet 包管理器”>“管理解决方案的 NuGet 包...”菜单命令,或右键单击解决方案,然后选择“管理 NuGet 包...”:

    Manage NuGet packages for the solution

  2. 管理解决方案的包时,UI 让你可以选择受操作影响的项目:

    Project selector when managing packages for the solution

“合并”选项卡

开发人员通常认为,在同一解决方案的不同项目中使用相同 NuGet 包的不同版本的做法不好。 当你选择管理解决方案的包时,包管理器 UI 提供了一个“合并”选项卡,让你可以轻松查看解决方案中不同项目使用的具有不同版本号的包:

Package Manager UI Consolidate tab

在本例中,ClassLibrary1 项目使用的是 EntityFramework 6.2.0,而 ConsoleApp1 使用的是 EntityFramework 6.1.0。 若要合并包版本,请执行以下操作:

  • 在项目列表中选择要更新的项目。
  • 选择要在“版本”控件中的所有项目中使用的版本,例如 EntityFramework 6.2.0。
  • 选择“安装”按钮。

包管理器将选定的包版本安装到所有选定的项目中,之后包不再显示在“合并”选项卡上

包源

若要更改 Visual Studio 从中获取包的源,请从源选择器中选择一个源:

Package source selector in the package manager UI

管理包源:

  1. 在下面的包管理器 UI 中选择“设置”图标,或使用“工具”>“选项”命令并滚动到“NuGet 包管理器”:

    Package manager UI settings icon

  2. 选择“包源”节点

    Package Sources options

  3. 要添加源,请选择 +,编辑名称,在“源”控件中输入 URL 或路径,然后选择“更新”。 选择器下拉列表中现在显示源。

  4. 若要更改包源,请选中它,在“名称”和“源”框中进行编辑,然后选择“更新”

  5. 若要禁用包源,请清除列表中名称左侧的框。

  6. 若要删除包源,请选中它,然后选择“X”按钮。

  7. 使用向上和向下箭头按钮不会更改包源的优先级顺序。 Visual Studio 会忽略包源的顺序,使用来自任何首先响应请求的源的包。 有关详细信息,请参阅包源

提示

如果在删除某个包源后,该包源重新出现,则它可能会列在计算机级或用户级 NuGet.Config 文件中。 有关这些文件的位置,请参阅常见 NuGet 配置,然后通过手动编辑文件或使用 nuget 源命令删除源。

包管理器“选项”控件

选择包后,包管理器 UI 会在版本选择器下方显示一个可扩展的“选项”小控件(此处显示为折叠和展开)。 请注意,对于某些项目类型,仅提供“显示预览窗口”选项

Package manager options

以下各节介绍了这些选项。

显示预览窗口

选中此选项后,模式窗口将显示安装包之前所选包的依赖项:

Example Preview Dialog

安装与更新选项

(并非适用于所有项目类型。)

“依赖项行为”用于配置 NuGet 如何决定要安装哪些版本的依赖包:

  • “忽略依赖项”会跳过安装任何依赖项,这通常会破坏正在安装的软件包。
  • 如果选择“最低”[默认选项],则安装具有可满足主要选定包要求的最小版本号的依赖项。
  • 如果选择“最高版本的修补程序”,则安装的版本的主要版本号和次要版本号相同,但修补程序版本号最高。 例如,如果指定版本 1.2.2,则会安装以 1.2 开头的最高版本
  • 如果选择“最高次要版本”,则安装的版本的主要版本号相同,但次要版本号和修补程序版本号最高。 如果指定版本 1.2.2,则会安装以 1 开头的最高版本
  • 选择“最高”可安装包的最高可用版本。

“文件冲突操作”指定 NuGet 应如何处理项目或本地计算机中已存在的包:

  • “提示”指示 NuGet 询问是保留还是覆盖现有包。
  • “全部忽略”指示 NuGet 跳过覆盖任何现有包。
  • “全部覆盖”指示 NuGet 覆盖任何现有包。

卸载选项

(并非适用于所有项目类型。)

“删除依赖项”:如果选中,则删除任何依赖包(如果它们未在项目中的其他位置引用)。

“在存在依赖项时仍强制卸载”:选中后,即使在项目中仍然引用了该包,也会卸载它。 此选项通常与“删除依赖项”一起选中,用于删除包及其安装的任何依赖项。 不过,使用此选项可能会导致项目中的引用中断。 在这种情况下,可能需要重新安装其他包