使用 Visual Studio 包管理器控制台管理包(PowerShell)

Visual Studio 中的包管理器控制台使用 PowerShell 命令与 NuGet 包进行交互。 当无法通过 包管理器 UI 执行作时,可以使用控制台。 还可以在控制台中使用 dotnet 命令行接口(CLI) 或 NuGet CLI 命令。

本文介绍如何使用包管理器控制台中的 PowerShell 命令查找、安装、更新和卸载 NuGet 包。 有关完整的包管理器控制台 PowerShell 命令参考信息,请参阅 PowerShell 参考。

重要

本文中的 PowerShell 命令和参数特定于 Visual Studio 包管理器控制台。 这些命令不同于可以在常规 PowerShell 环境中使用的 PackageManagement 模块命令 。 每个环境都有在其他环境中不可用的命令,具有相同名称的命令可能与其特定参数不同。

控制台可用性

从 Visual Studio 2017 开始,在 Visual Studio 中创建任何与 .NET 相关的工作负载时,NuGet 和 NuGet 包管理器会自动安装。 您还可以使用 Visual Studio Installer 安装包管理器。 在安装程序中,选择 “单个组件>代码工具>NuGet 包管理器”。

还可以在“ 工具>扩展和更新 ”或“ 扩展 ”菜单下搜索 Visual Studio 中的 NuGet 包管理器扩展。 如果无法在 Visual Studio 中使用扩展安装程序,可以直接从 https://www.nuget.org/downloads中下载扩展。

包管理器控制台内置于 Windows 上的 Visual Studio 包管理器中。 Visual Studio Code 不包括控制台,但你可以使用 C# 开发工具包 扩展来管理 NuGet 包。 使用此扩展,可以在 C# 开发工具包解决方案资源管理器或 Visual Studio Code 命令面板中运行命令。 有关详细信息,请参阅 Visual Studio Code 中的 NuGet。

快速查找并安装包

若要使用包管理器控制台快速查找并安装包,请执行以下步骤:

  1. 在 Visual Studio 中打开项目或解决方案,然后选择 “工具>NuGet 包管理器>包管理器控制台 ”以打开“包管理器控制台”窗口。

  2. 在控制台中,使用关键字运行 Find-Package 命令以查找要安装的包。 例如,若要查找提供错误日志记录模块和处理程序(ELMAH)的包,请运行以下命令以搜索关键字 elmah。 如果已知道所需的包名称,请跳过此步骤。

    Find-Package elmah
    
  3. 找到包后,使用包 ID 运行 Install-Package 命令以安装包。 例如,若要安装 Elmah.MVC 包,请运行以下命令:

    Install-Package Elmah.MVC
    

有关这些命令的更多详细信息,请参阅 “查找包 并 安装包 ”部分。

小窍门

许多控制台操作依赖于在 Visual Studio 中打开一个具有已知路径名称的解决方案。 如果你有未保存的解决方案或没有解决方案,则会显示一条错误消息,说明没有打开或保存的解决方案。 若要更正错误,请创建和保存解决方案,或保存未保存的解决方案。

使用控制台控件

若要在 Visual Studio 中打开包管理器控制台,请转到顶部菜单,然后选择“工具>NuGet 包管理器>控制台”。 控制台是一个 Visual Studio 窗口,你可以根据需要排列和定位。 有关详细信息,请参阅 “自定义窗口布局”和“个性化”选项卡。

默认情况下,控制台命令针对包管理器控制台窗口顶部控件中显示的特定包源和项目进行操作:

“包管理器控制台”窗口的屏幕截图。顶部突出显示了“包源”和“默认项目”列表。

选择其他包源或项目会更改后续命令的默认值。 若要在不更改默认值的情况下覆盖单个命令的这些设置,大多数控制台命令都支持 -Source 和 -ProjectName 选项。

若要管理包源,请选择齿轮图标,这将打开 “工具>选项>NuGet 包管理器>包源 ”对话框。 若要清除主机的内容,请选择“默认项目”列表旁边的“清除控制台”。

“包管理器控制台”窗口的屏幕截图。在顶部附近,突出显示了两个图标。其中一个显示齿轮。另一个显示输出行和红色 X。

若要中断长时间运行的命令,请选择“清除控制台”图标旁边的“停止”命令执行。 例如,运行 Get-Package -ListAvailable -PageSize 500 列出了默认源上的前 500 个可用包,例如 nuget.org,这可能需要几分钟时间。

“包管理器控制台”窗口的屏幕截图。在顶部附近,突出显示了“停止”命令执行图标(看起来像一个红色正方形)。

查找包

若要在默认源中查找包,请使用 Find-Package。 以下代码块演示如何使用参数来优化搜索:

  • 查找并列出包含特定关键字的包:

    Find-Package <keyword>
    
  • 查找并列出 ID 以特定字符串开头的包:

    Find-Package <string> -StartWith
    
  • 显示包含特定关键字的前 100 个包:

    Find-Package <keyword> -First 100
    

    默认情况下, Find-Package 返回 20 个包的列表。 如前面的示例所示,可用于 -First 指定不同数量的包。

  • 列出特定包的所有版本:

    Find-Package <package-name> -AllVersions -ExactMatch
    

安装一个软件包

若要将包安装到默认项目中,请使用 Install-Package <package-name>。 Install-Package 控制台命令执行以下作:

  • 执行 安装 NuGet 包时发生的情况中的步骤。
  • 在控制台窗口中显示适用的许可条款,其中包含默示协议。 如果不同意条款,应卸载包。
  • 在项目文件和 解决方案资源管理器 的 “依赖项 ”或“ 引用 ”节点下添加对包的引用。 必须保存项目才能将更改传播到项目文件。

默认情况下, Install-Package 将包添加到控制台窗口指定的默认项目。 若要将包添加到不是默认项目的项目,请使用 -ProjectName 该选项。 例如,若要将 Elmah.MVC 包添加到非默认 UtilitiesLib 项目,请运行以下命令:

Install-Package Elmah.MVC -ProjectName UtilitiesLib

卸载软件包

若要从默认项目中卸载包,请使用 Uninstall-Package <package-name>。 如果需要查找包名称,请使用 Get-Package 列出默认项目中安装的所有包。

Uninstall-Package 执行以下作:

  • 从项目中删除对包的引用以及任何管理格式。 引用不再显示在 解决方案资源管理器中。 可能需要重新生成项目才能删除 bin 文件夹中的引用。
  • 恢复安装包对 app.config 或 web.config 所做的任何更改。
  • 如果没有剩余的包使用这些依赖项,则删除以前安装的依赖项。

以下代码块演示如何在各种方案中使用该命令:

  • 卸载包及其所有未使用的依赖项:

    Uninstall-Package <package-name> -RemoveDependencies
    
  • 卸载包,即使其他包依赖于它:

    Uninstall-Package <package-name> -Force
    

更新一个包

若要更新包,请使用 Update-Package。 还可以使用 Get-Package 列出已安装包的可用更新。 以下代码块演示如何使用参数修改更新范围:

  • 检查新版本是否可用于解决方案中安装的任何包:

    Get-Package -updates
    
  • 更新特定包:

    Update-Package <package-name>
    
  • 更新项目中的所有包:

    Update-Package -ProjectName <project-name>
    
  • 更新解决方案中的所有包:

    Update-Package
    

在控制台中使用 NuGet CLI

还可以使用 NuGet CLI 执行大多数控制台操作。 但是,PowerShell 控制台命令在 Visual Studio 保存的项目和解决方案的上下文中运行,并且通常比其等效的 NuGet CLI 命令执行更多操作。 例如,通过 Install-Package 安装程序包时会向项目文件添加一个引用,但使用 NuGet 命令行工具的命令则不会添加引用。 因此,在 Visual Studio 中工作的开发人员通常更喜欢使用控制台命令,而不是 NuGet CLI。

若要在包管理器控制台中使用 NuGet CLI 命令,请安装 NuGet.CommandLine 包。

Install-Package NuGet.CommandLine

上述命令安装最新版本的 NuGet CLI。 若要安装特定版本,请使用 -Version 此选项。 例如,若要安装版本 4.4.1,请使用以下命令:

Install-Package NuGet.CommandLine -Version 4.4.1

安装 NuGet.CommandLine 包后,可以通过包管理器控制台运行所有 NuGet CLI 命令。

扩展包管理器控制台

某些包通过添加命令来扩展包管理器控制台。 例如,包 Microsoft.EntityFrameworkCore.Tools 会添加如下命令:

  • Add-Migration:生成用于创建或更新数据库表的迁移文件
  • Update-Database:根据最新迁移创建或更新数据库

“包管理器控制台”窗口的屏幕截图。Add-Migration 和 Update-Database 命令的输出显示正在创建的数据库。

配置 NuGet PowerShell 配置文件

可以创建 PowerShell 配置文件,使常用命令在所有 PowerShell 上下文中可用,因此不会丢失会话之间的 PowerShell 设置。 NuGet 支持特定于 NuGet 的配置文件,通常位于 %UserProfile%\Documents\WindowsPowerShell\NuGet_profile.ps1。

若要查找用户配置文件位置,请在控制台中输入 $profile :

$profile
C:\Users\<user>\Documents\WindowsPowerShell\NuGet_profile.ps1

若要确定在该位置是否存在个人资料,请输入test-path $profile。 如果命令返回 False,则需要在该位置创建具有指定名称的配置文件。 有关详细信息,请参阅 Windows PowerShell 配置文件。