Restore NuGet Packages
Package Restore installs the direct dependencies of a project as needed and then installs any dependencies of those packages throughout the entire dependency graph.
Restore command only adds packages to the disk; it does not change a project’s dependencies. Nuget Restore keeps the dependency files in a cache location
. To change a project’s dependencies, modify packages.config
file then restore pacakages again.
Clear NuGet Packages
Clear NuGet packages is an action that removes already installed NuGet caches from the cache location.
Normally, NuGet Packages are installed from the cache location if one exists, otherwise it will be downloaded from the corresponding feed. Sometimes we need to clear the NuGet Packages when we encounter package installation problems or we just want to make sure packages have been installed and configured locally, it does not hurt to clear the NuGet Packages and restore them. NuGet Package Cache is store in %userprofile%\.nuget\packages
, you can clear the NuGet Package manually by removing the files in the location. Alternatively, you could remove cache automatically through VS.
%userprofile%.nuget\packages
Image above is the %userprofile%\.nuget\packages
folder we talked about. We could delete files in the folder to clear NuGet Packages in our lcoal environment.
NuGet CLI
NuGet CLI
tool allows you to easily update and restore NuGet packages in projects and solution. In order to use NuGet CLI, we must have the nuget.exe
file. Most importantly, NuGet CLI
requires a packages.config
file for package references, and the file needs to be placed in the project location. To find out if you installed nuget.exe
or figure out the version, you could use nuget ? v - command
.
The screenshot above show NuGet CLI
is installed in local environment and the version is 6.4.0.123
DotNet CLI
DonNet CLI
allows you to do pretty much the same things as NuGet CLI does. On top of that, you can use DotNet CLI
on Windows, Mac and Linux.
nuget restore
vs dotnet restore
There are two ways of how NuGet packages are referenced in .NET project. nuget restore
keeps the dependencies file in a cache location and dotnet restore
keeps the file in Solution
Folder
packages.config
It is the classic way of referencing NuGet packages. It assumes NuGet is a separate tool and MSBuild doesn’t have any acknowledge of NuGet. nuget.exe
(NuGet client) read through the packages.config
file and downloads the referenced packages into a local folder on restore. nuget restore command only downloads the (packages) file, instead of modifying packages.config
file.
PackageReference
Unlike packages.config
, only the direct dependencies are listed. On restore via PackageReference
, NuGet client (in this case, MSBuild items that reference a Nuget Package) figures out dependency graph by evaluating the direct and transitive (indirect) dependencies, and ensure packages are downloaded into user’s cache folder (in %userprofile%\.nuget\packages
), and supply an assets file into the obj
folder that contains a list of all packages and assets that the project users.
Reflection
In my opinion, nuget restore
downloads all of NuGet dependencies, where as dotnet restore
is a complete restoration of NuGet dependencies as well as references and project specific tools.