Reputation: 3252
I have a .net solution (say A) with multiple projects(say B,C,D). I want to update all nuget packages for all projects in the solution. I know I can update nuget packages using command line but passing in the path to packages.config
nuget update A/B/packages.config
Is there a way to update packages for all packages.configs inside folder A using command line without having to specify them individually? (I know this can be done from inside visual studio.) Something like
nuget update A/*/packages.config
Upvotes: 51
Views: 48475
Reputation: 3631
Right click the solution and click 'Manage NuGet Packages for Solution':
Go to Updates
tab, check Select all packages
and hit Update
button:
Upvotes: 2
Reputation: 20489
You could use nuget's new "Central Package Management" feature.
Suppose you have monorepo (i.e. VS "solution" or VSCode "workspace") with multiple projects.
ProjectA.csproj
:
<ItemGroup>
<PackageReference Include="Foo.Bar.Baz" Version="1.0.0" />
<PackageReference Include="Spam.Ham.Eggs" Version="4.0.0" />
</ItemGroup>
ProjectB.csproj
:
<ItemGroup>
<PackageReference Include="Foo.Bar.Qux" Version="1.2.3" />
<PackageReference Include="Spam.Ham.Eggs" Version="4.5.6" />
</ItemGroup>
Some items are the same whereas others differ. And you need to remember to keep the versions in sync - the example shows that you forgot to do that!
ProjectA.csproj
:
<ItemGroup>
<PackageReference Include="Foo.Bar.Baz" />
<PackageReference Include="Spam.Ham.Eggs" />
</ItemGroup>
ProjectB.csproj
:
<ItemGroup>
<PackageReference Include="Foo.Bar.Qux" />
<PackageReference Include="Spam.Ham.Eggs" Version="4.0.0" /> <!-- note version override for this project -->
</ItemGroup>
Directory.Packages.props
to your repo's root<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<!-- use 'PackageVersion' rather than 'PackageReference' -->
<PackageVersion Include="Foo.Bar.Baz" Version="1.2.3" />
<PackageVersion Include="Foo.Bar.Qux" Version="1.2.3" />
<PackageVersion Include="Spam.Ham.Eggs" Version="4.5.6" />
</ItemGroup>
</Project>
For each project:
dotnet clean
dotnet restore
All your projects will now use the versions you've specified in the config file.
There are more options, like version overrides, and transitive dependency pinining - read the docs for more.
Upvotes: 4
Reputation: 5715
First you have to restore all packages using nuget restore solution_file.sln
then update them to latest version by executing nuget update solution_file.sln
.
Read more about nuget command line
Updated link to Nuget command line documentation
Nuget Package Manager Console documentation (Visual Studio for Windows)
Edit: Previous link is dead. Added working equivalent and bonus Package Manager Console link.
Upvotes: 12
Reputation: 1291
You have used command line examples, but your question does not state if you require a command line answer. If you do not require command line, you can right-click on your solution in the Solution Explorer, and select Manage NuGet Packages for Solution ... This displays a dialog where you can make your selections. Other than that, you'd need to write a script at this point in time anyway (as far as I know).
Upvotes: 34
Reputation: 8959
As found in NuGet documentation, you can type:
Update-Package
This will :
Update all packages in all projects of the current solution to the latest versions.
To open the Package Manager Console:
Tools > NuGet Package Manager > Package Manager Console
Now, in order to have only one instance of all packages, I have, in my solution folder, a file named nuget.config
that contains:
<configuration>
<config>
<add key="repositoryPath" value="..\Path\To\My\Packages" />
</config>
</configuration>
You might need to reload your solution in order to make it work properly.
Upvotes: 51