Package Manager Console

The NuGet Package Manager Console is built into Visual Studio on Windows version 2012 and later. (It is not included with Visual Studio for Mac or Visual Studio Code.)

The console lets you use NuGet PowerShell commands to find, install, uninstall, and update NuGet packages. Using the console is necessary in cases where the Package Manager UI does not provide a way to perform an operation.

For example, finding and installing a package is done with three easy steps:

  1. Open the project/solution in Visual Studio, and open the console using the Tools > NuGet Package Manager > Package Manager Console command.

  2. Find the package you want to install. If you already know this, skip to step 3.

    # Find packages containing the keyword "elmah"
    Find-Package elmah
    
  3. Run the install command:

    # Install the Elmah package to the project named MyProject.
    Install-Package Elmah -ProjectName MyProject
    

In this topic:

Important

All operations that are available in the console can also be done with the NuGet CLI. However, console commands operate within the context of Visual Studio and a saved project/solution and often accomplish more than their equivalent CLI commands. For example, installing a package through the console adds a reference to the project whereas the CLI command does not. For this reason, developers working in Visual Studio typically prefer using the console to the CLI.

Tip

Many console operations depend on having a solution opened in Visual Studio with a known path name. If you have an unsaved solution, or no solution, you can see the error, "Solution is not opened or not saved. Please ensure you have an open and saved solution." This indicates that the console cannot determine the solution folder. Saving an unsaved solution, or creating and saving a solution if you don't have one open, should correct the error.

Opening the console and console controls

  1. Open the console in Visual Studio using the Tools > NuGet Package Manager > Package Manager Console command. The console is a Visual Studio window that can be arranged and positioned however you like (see Customize window layouts in Visual Studio).

  2. By default, console commands operate against a specific package source and project as set in the control at the top of the window:

    Package Manager Console controls for package source and project

  3. Selecting a different package source and/or project changes those defaults for subsequent commands. To overrride these settings without changing the defaults, most commands support -Source and -ProjectName options.

  4. To manage package sources, select the gear icon. This is a shortcut to the Tools > Options > NuGet Package Manager > Package Sources dialog box as described on the Package Manager UI page. Also, the control to the right of the project selector clears the console's contents:

    Package Manager Console settings and clear controls

  5. The rightmost button interrupts a long-running command. For example, running Get-Package -ListAvailable -PageSize 500 lists the top 500 packages on the default source (such as nuget.org), which could take several minutes to run.

    Package Manager Console stop control

Installing a package

# Add the Elmah package to the default project as specified in the console's project selector
Install-Package Elmah

# Add the Elmah package to a project named UtilitiesLib that is not the default
Install-Package Elmah -ProjectName UtilitiesLib

See Install-Package.

Installing a package performs the following actions:

  • Displays applicable license terms in the console window with implied agreement. If you do not agree to the terms, you should uninstall the package immediately.
  • Adds a reference to the project in whatever reference format is in use. References subsequently appear in Solution Explorer and the applicable reference format file. Note, however, that with PackageReference, you need to save the project to see the changes in the project file directly.
  • Caches the package:
    • PackageReference: package is cached at %USERPROFILE%\.nuget\packages and the lock file i.e. project.assets.json is updated.
    • packages.config: creates a packages folder at the solution root and copies the package files into a subfolder within it. The package.config file is updated.
  • Updates app.config and/or web.config if the package uses source and config file transformations.
  • Installs any dependencies if not already present in the project. This might update package versions in the process, as described in Dependency Resolution.
  • Displays the package's readme file, if available, in a Visual Studio window.

Tip

One of the primary advantages of installing packages with the Install-Package command in the console is that adds a reference to the project just as if you used the Package Manager UI. In contrast, the nuget install CLI command only downloads the package and does not automatically add a reference.

Uninstalling a package

# Uninstalls the Elmah package from the default project
Uninstall-Package Elmah

# Uninstalls the Elmah package and all its unused dependencies
Uninstall-Package Elmah -RemoveDependencies 

# Uninstalls the Elmah package even if another package depends on it
Uninstall-Package Elmah -Force

See Uninstall-Package. Use Get-Package to see all packages currently installed in the default project if you need to find an identifier.

Uninstalling a package performs the following actions:

  • Removes references to the package from the project (and whatever reference format is in use). References no longer appear in Solution Explorer. (You might need to rebuild the project to see it removed from the Bin folder.)
  • Reverses any changes made to app.config or web.config when the package was installed.
  • Removes previously-installed dependencies if no remaining packages use those dependencies.

Tip

Like Install-Package, the Uninstall-Package command has the benefit of managing references in the project, unlike the nuget uninstall CLI command.

Updating a package

# Checks if there are newer versions available for any installed packages
Get-Package -updates

# Updates a specific package using its identifier, in this case jQuery
Update-Package jQuery

# Update all packages in the project named MyProject (as it appears in Solution Explorer)
Update-Package -ProjectName MyProject

# Update all packages in the solution
Update-Package

See Get-Package and Update-Package

Finding a package

# Find packages containing keywords
Find-Package elmah
Find-Package logging

# List packages whose ID begins with Elmah
Find-Package Elmah -StartWith

# By default, Get-Package returns a list of 20 packages; use -First to show more
Find-Package logging -First 100

# List all versions of the package with the ID of "jquery"
Find-Package jquery -AllVersions -ExactMatch

See Find-Package. In Visual Studio 2013 and earlier, use Get-Package instead.

Availability of the console

In Visual Studio 2017, NuGet and the NuGet Package Manager are automatically installed when you select any .NET-related workloads; you can also install it individually by checking the Individual components > Code tools > NuGet package manager option in the Visual Studio 2017 installer.

Also, if you're missing the NuGet Package Manager in Visual Studio 2015 and earlier, check Tools > Extensions and Updates... and search for the NuGet Package Manager extension. If you're unable to use the extensions installer in Visual Studio, you can download the extension directly from https://dist.nuget.org/index.html.

The Package Manager Console is not presently available with Visual Studio for Mac. The equivalent commands, however, are available through the NuGet CLI. Visual Studio for Mac does have a UI for managing NuGet packages. See Including a NuGet package in your project.

The Package Manager Console is not included with Visual Studio Code.

Extending the Package Manager Console

Some packages install new commands for the console. For example, MvcScaffolding creates commands like Scaffold shown below, which generates ASP.NET MVC controllers and views:

Installing and using MvcScaffold

Setting up a NuGet PowerShell Profile

A PowerShell profile lets you make commonly-used commands available wherever you use PowerShell. NuGet supports a NuGet-specific profile typically found at the following location:

%UserProfile%\Documents\WindowsPowerShell\NuGet_profile.ps1

To find the profile, type $profile in the console:

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

For more details, refer to Windows PowerShell Profiles.