A quick tutorial on the Update-Package command

Among the supported commands in NuGet’s Package Manager Console, Update-Package is arguably the most powerful in terms of its supported parameters and switches. The primary purpose of the command is to update package(s) in your projects to a higher (possibly latest) version. However, the provided parameters allow you to twist this behavior in many different ways. In this post, I’m going to give a quick tutorial on what possible ways you can invoke the command.

In total, the Update-Package command offers eight parameters (in addition to the built-in PowerShell parameters):

Parameter Type Description
-Id string Specifies the Id of the package to be updated.
-ProjectName string Specifies the name of the project in which packages should be updated.
-Version SemanticVersion* Specifies the new target version of the package as a result of the update.
-Source string Specifies where to look for package updates, overriding the package sources that are specified in the Options dialog. This value can be either a url to a remote repository or a path to a local repository or the name of a package source specified in the Options dialog.
-IgnoreDependencies Switch parameter If set, NuGet will ignore dependency packages and only update the main package.
-Safe Switch parameter If set, NuGet will only update to a new version that has the same major and minor versions as the previous package. For example, if the old version is 1.2.0, NuGet will accept the update package with version of 1.2.1 or 1.2.9999 but it will not accept 1.3.0.
-IncludePrerelease Switch parameter If set, NuGet will consider prerelease packages as candidates for updates.
-Reinstall Switch parameter If set, instead of updating the package to the latest version, NuGet will uninstall the package and reinstall the same version. This is useful when, for example, you've updated the target framework of your project, e.g. from .NET 4.0 to .NET 4.5, and you want to reference .NET 4.5-specific assemblies in the package. You can't set this parameter together with the -Version parameter.

*Although the type of the -Version parameter is SemanticVersion, which is a type declared by NuGet, you can just use string when you set it. PowerShell will automatically convert it for you, as long as the value can be parsed by the SemanticVersion class.

With that, here are the common use cases for the Update-Package command:

  • Update a particular package in a project to the latest version:
    Update-Package jQuery -ProjectName MyProject

  • Update a particular package in a project to the latest version, using safe update rule:
    Update-Package jQuery -ProjectName MyProject -Safe

  • Update a particular package in a project to a particular version:
    Update-Package jQuery -ProjectName MyProject -Version 1.8

  • Update a particular package in all projects of the current solution to the latest version:
    Update-Package jQuery

  • Update a particular package in all projects of the current solution to a particular version:
    Update-Package jQuery -version 1.8

  • Reinstall a particular package in all projects of the current solution:
    Update-Package jQuery -reinstall

  • Update all packages in a project to the latest versions:
    Update-Package -ProjectName MyProject

  • Reinstall all packages in a project:
    Update-Package -ProjectName MyProject -reinstall

  • Update all packages in all projects of the current solution to the latest versions:
    Update-Package

  • Reinstall all packages in all projects of the current solution:
    Update-Package -Reinstall

Phew, that’s a lot of different combinations; but they are quite intuitive and easy to remember. To keep the list small, I left out the -IgnoreDependencies and -IncludePrelease parameters but you can add either (or both) of them to any of the example above (except that you can’t use -Version and -Reinstall together, remember?) to adjust the behavior of the command.

Hope that helps. Happy New Year.

Published December 31, 2012 by Luan Nguyen

blog comments powered by Disqus