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 安装程序中选择 单个组件>代码工具>NuGet 包管理器来安装包管理器 。
还可以在“工具>”或“扩展”菜单下搜索 NuGet 包管理器扩展。 如果无法在 Visual Studio 中使用扩展安装程序,可以直接从 https://dist.nuget.org/index.html中下载扩展。
包管理器控制台内置于 Windows 上的 Visual Studio 包管理器中。 Visual Studio Code 和 Visual Studio for Mac 不包含控制台。 Visual Studio for Mac 具有用于管理 NuGet 包的 UI,并且通过 NuGet CLI 提供等效的控制台命令。 有关详细信息,请参阅 在 Visual Studio for Mac 中安装和管理 NuGet 包。
快速查找并安装包
若要使用包管理器控制台快速查找并安装包,请执行以下作:
在 Visual Studio 中打开项目或解决方案,然后选择 “工具>NuGet 包管理器>包管理器控制台 ”以打开“包管理器控制台”窗口。
在控制台中,输入
Find-Package关键字以查找要安装的包。 例如,若要查找包含关键字elmah的包,请运行以下命令。 如果已知道所需的包名称,请跳过此步骤。Find-Package elmah找到名称后,使用
Install-Package命令安装包。 例如,若要安装Elmah.MVC包,请输入:Install-Package Elmah.MVC
有关这些命令的更多详细信息,请参阅 “查找包 并 安装包 ”部分。
小窍门
许多控制台操作依赖于在 Visual Studio 中打开一个具有已知路径名称的解决方案。 如果你有未保存的解决方案,或者没有解决方案,则会看到错误 “解决方案”未打开或未保存。请确保已打开并保存解决方案。 若要更正错误,请创建和保存解决方案,或保存未保存的解决方案。
控制台控件
若要在 Visual Studio 中打开包管理器控制台,请从顶部菜单中选择 “工具>NuGet 包管理器>包管理器控制台 ”。 控制台是一个 Visual Studio 窗口,你可以根据需要排列和定位。 有关详细信息,请参阅 Visual Studio 中的自定义窗口布局。
默认情况下,控制台命令针对窗口顶部控件中显示的特定包源和项目进行作:
选择其他包源或项目会更改后续命令的默认值。 若要在不更改默认值的情况下覆盖单个命令的这些设置,大多数控制台命令都支持 -Source 和 -ProjectName 选项。
若要管理包源,请选择齿轮图标,这将打开 “工具>选项>NuGet 包管理器>包源 ”对话框。 项目选择器旁边的控件清除控制台的内容。
最右侧的按钮用于中断一个正在运行的长时间命令。 例如,运行 Get-Package -ListAvailable -PageSize 500 列出了默认源上的前 500 个可用包,例如 nuget.org,这可能需要几分钟时间。
查找包
若要在默认源中查找包,请使用 Find-Package。
查找并列出包含特定关键字的包:
Find-Package <keyword1> Find-Package <keyword2>若要查找并列出名称以字符串开头的包:
Find-Package <string> -StartWith默认情况下,
Find-Package返回 20 个包的列表。 使用-First显示更多软件包。 例如,若要显示前 100 个包,请使用:Find-Package <keyword> -First 100列出特定包的所有版本:
Find-Package <PackageName> -AllVersions -ExactMatch
安装一个软件包
若要将包安装到默认项目中,请使用 Install-Package <PackageName>。
Install-Package 控制台命令执行以下作:
- 执行 安装 NuGet 包时发生的情况中的步骤。
- 在控制台窗口中显示适用的许可条款,其中包含默示协议。 如果不同意条款,应卸载包。
- 在项目文件和 解决方案资源管理器 的 “引用 ”节点下添加对包的引用。 必须先保存项目,然后才能查看项目文件中的更改。
默认情况下, Install-Package 将包添加到控制台窗口指定的默认项目。 若要将包添加到不是默认值的项目,请使用 -ProjectName 该选项。 例如,若要将 Elmah.MVC 包添加到非默认 UtilitiesLib 项目,请运行以下命令:
Install-Package Elmah.MVC -ProjectName UtilitiesLib
卸载软件包
若要从默认项目中卸载包,请使用 Uninstall-Package <PackageName>。 如果需要查找包名称,请使用 Get-Package 查看默认项目中安装的所有包。
Uninstall-Package 执行以下作:
- 从项目中删除对包的引用以及任何管理格式。 引用不再显示在 解决方案资源管理器中。 可能需要重新生成项目才能删除 bin 文件夹中的引用。
- 恢复安装包对 app.config 或 web.config 所做的任何更改。
- 如果没有剩余的包使用这些依赖项,则删除以前安装的依赖项。
若要卸载包及其所有未使用的依赖项,请运行:
Uninstall-Package <PackageName> -RemoveDependencies
若要卸载包,即使其他包依赖于它,请运行:
Uninstall-Package <PackageName> -Force
更新一个包
若要更新包,请使用 Get-Package 和 Update-Package。 可以运行以下命令:
若要检查是否有适用于任何已安装包的较新版本:
Get-Package -updates若要更新特定包,请:
Update-Package <PackageName>若要更新项目中的所有包,请执行以下作:
Update-Package -ProjectName <ProjectName>若要更新解决方案中的所有包,请执行以下作:
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 命令。
扩展包管理器控制台
某些包为控制台安装新命令。 例如, MvcScaffolding 创建类似于 Scaffold生成 ASP.NET MVC 控制器和视图的命令:
配置 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 配置文件。