[nuget] How do I get NuGet to install/update all the packages in the packages.config?

I have a solution with multiple projects in it. Most of the third party references are missing, yet there are packages.config file for each project. How do I get NuGet to install/update all the packages needed? Does this need to be done via command line for each project?

This question is related to nuget

The answer is


Open Package Manager Console

  • View -> Other Windows -> Package Manager Console

Reinstall all packages in ALL PROJECTS of the current solution:

Update-Package -Reinstall

Reinstall all packages in SPECIFIC PROJECT of the current solution (Thanks to unarity and ashes999):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

I know this is an old post, but thought this could be useful. If you have a need to ignore specific packages during the update process (like any packages that update JavaScript references), use the following PowerShell script (make sure your package source is set to "All" in Package Manager Console):

EDIT 2014-09-25 10:55 AM EST - Fixed a bug in the script

$packagePath = "packages.config"
$projectName = "MyProjectName"

$packagesToIgnore = @(
    "bootstrap",
    "jQuery",
    "jquery-globalize",
    "jquery.mobile",
    "jQuery.jqGrid",
    "jQuery.UI.Combined",
    "jQuery.Validation",
    "Microsoft.jQuery.Unobtrusive.Validation",
    "Modernizr",
    "Moment.js"
)

[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}

$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }

now Nuget Package Manager Console in Visual Studio 2012 gives you a "Restore" button automatically as soon it find any package not installed but in there in package.config. Awesome Feature!


After 3 hours of searching and investigation.

I had problems with it because we have two members in team (using GitHub source control), because we didn't restrict files for packages for sending to remote repository, one of team members was send packages to server and i have pull that changes to my local.

After that i had same problem as PO, also i wasn't be able to publish my API project to server.

At the and I have just used

Update-Package -Reinstall - run this command on Package Manager Console

This command will reinstall all your packages that you have used in your solution. (For every project)

Reinstall all packages in ALL PROJECTS of the current solution:

Update-Package -ProjectName 'NameOfProject' -Reinstall - run this command on Package Manager Console

This command will reinstall all your packages that are in relation with project that you specified after "-ProjectName". And i think that this is better because i had wait for half a hour to reinstall all packages in solution.

For this many thanks to Rodolpho Brock.

Also, I would recommend you that when you pull changes from remote server, to press "Restore packages" button that will be shown by Visual studio.


With the latest NuGet 2.5 release there is now an "Update All" button in the packages manager: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once


At VS2012 V11, if I use "-Reinstall" at the end of the line it doesn't work.

So I simply used:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

Don't know since when, but in VS2019 you can do it in an easier way:

  1. right click solution in Solution Explorer
  2. select Manage Nuget Packages for Solution
  3. there are 4 tabs, Browse, Installed, Updates, Consolidate
  4. the Consolidate shows if there is any projects using different version of packages (and in most cases, that's why we want to update all the packages)
  5. the Updates shows if there is any update available in ANY projects. Select all and click update, the job will be done.

I'm using visual studio 2015 and the solutions given above didn't work for me, so i did the following:

Delete the packages folder from my solution and also bin and obj folders from every project in the solution and give it a rebuild.

Maybe you will have the next error:

unable to locate nuget.exe

To solve this: Change this line in your NuGet.targets file and setting it to true:

<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Reference:https://stackoverflow.com/a/30918648 and https://stackoverflow.com/a/20502049


Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

This is best and easiest example I found. It will reinstall all nugets that are listed in packages.config and it will preserve current versions. Replace YourProjectNameGoesHere with the project name.


Here's another solution if you are using website projects, or don't want to enable NuGet Package restore.

You can use the package manager console to enumerate all the packages in the package.config file and re-install them.

# read the packages.config file into an XML object
[xml]$packages = gc packages.config

# install each package 
$packages.packages.package | % { Install-Package -id $($_.id) -Version $($_.version) }

I tried Update-Package -reinstall but it fails on a package and stopped processing all remaining packages of projects in my solution.

I ended up with my script that enumerates all package.config files and run Update-Package -Reinstall -ProjectName prj -Id pkg for each project/package.

Hope it can be useful for someone:

$files = Get-ChildItem -Recurse -Include packages.config;

[array]$projectPackages = @();
$files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } }

$projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }

Edit: This is an error that I had: Update-Package : Unable to find package 'EntityFramework.BulkInsert-ef6'. Existing packages must be restored before performing an install or update. Manual run of Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 worked very well.


There is another, newer and quicker way to do this from within Visual Studio. Check out this post by David Ebbo, and reference the comments section if you run into trouble. Basically, you do the following in Package Manager prompt:

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

Afterwards, when you build your solution the packages will be automatically installed if they're missing.

Update:

This functionality is built into Nuget 1.6 with visual studio integration so you don't even need to install NuGetPowerTools or type commands. All you have to do is

Right click on the Solution node in Solution Explorer and select Enable NuGet Package Restore.

Read this article for more details.


I believe the first thing you need to do is enable the package restore feature. See also here. This is done at the solution (not project) level.

But that won't get you all the way -- I ran into a similar issue after having enabled the restore feature. (VS2013, NuGet 2.8.)

It turned out I had (unintentionally) committed the packages to source control when I committed the project -- but Visual Studio (and the source control plugin) had helpfully ignored the binaries when performing the check-in.

The problem arose when I created a release branch. My local copy of the dev/main/trunk branch had the binaries, because that's where I had originally installed/downloaded the packages.
However, in the new release branch,

  • the package folders and .nupkg files were all there -- so NuGet didn't think there was anything to restore;
  • but at the same time, none of the DLLs were present -- i.e. the third-party references were missing -- so I couldn't build.

I deleted all the package folders in $(SolutionDir)/packages (under the release branch) and then ran a full rebuild, and this time the build succeeded.
... and then of course I went back and removed the package folders from source control (in the trunk and release branch). I'm not clear (yet) on whether the repositories.config file should be removed as well.

Many of the components installed for you by the project templates -- at least for web projects -- are NuGet packages. That is, this issue is not limited to packages you've added.
So enable package restore immediately after creating the project/solution, and before you perform an initial check-in, clear the packages folder (and make sure you commit the .nuget folder to source control).

Disclaimer: I saw another answer here on SO which indicated that clearing the packages folder was part of the resolution. That put me on the right track, so I'd like to give the author credit, but I can no longer locate that question/answer. I'll post an edit if I stumble across it.

I'd also note that Update-Package -reinstall will modify the .sln and .csproj/.vbproj files. At least that's what it did in my case. Which IMHO makes this option much less attractive.


If you Nuget 2.8 install, check the checkbox

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

in Visual Studio. If it is checked, then simply rebuild the project will restore all your reference libraries.


For those arriving here due to the build server falling foul of this, you can create an MSBuild target running the exec command to run the nuget restore command, as below (in this case nuget.exe is in the .nuget folder, rather than on the path), which can then be run in a TeamCity build step immediately prior to building the solution

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

In Visual Studio 2017 - When you compile using IDE - It will download all the missing nuget packages and save in the folder "packages".

But on the build machine compilation was done using msbuild.exe. In that case, I downloaded nuget.exe.

During each build process before executing msbuild.exe. It will execute -> nuget.exe restore NAME_OF_SLN_File (if there is only one .SLN file then you can ignore that parameter).