With newer versions of NuGet it is possible to configure a project to automatically restore NuGet packages so that the packages
folder doesn't need to be included in the source code repository. Good.
However, this command adds a new .nuget
folder and there is a binary there, NuGet.exe. This can also be re-created automatically by Visual Studio and so it doesn't feel correct to add that to version control. However, without this folder Visual Studio won't even load the solution properly.
How do you people deal with this? Add .nuget to source control? Run some command line script before opening the solution?
Now that nuget supports package restoration we're looking at it more closely.
We use Subversion for source control, and my initial thoughts are that
.nuget
should be added to our repository, but added using svn:externals so that it points to a single location.That way we can automatically push out new versions to all developers and projects. For projects on release branches, rather than HEAD, we can specify the revision of svn:externals reference if we want to leave nuget alone.
We have a lot of projects, so it also means not duplicating
nuget.exe
multiple times in the repo.We have the
nuget.config
file in the folder, as it has the references to our internal Nuget server, using the Package Sources area: https://docs.nuget.org/consume/nuget-config-settingsApart from this reason, you should let Visual Studio handle the downloading of packages.
@Richard Szalay's answer is right - you don't need to commit nuget.exe. If for some reasons Visual Studio does not automatically download the nuget.exe, make sure you have the following set to true in the
nuget.targets
file:Close the VS solution, reopen it and build it. Visual Studio should download nuget.exe automatically now.
According to this thread, the .nuget folder should be version controlled.
This post is old, you should not be using solution level NuGet package restore anymore. As of version 2.7+ there is an option in the NuGet setup to automatically restore packages on build. So the .nuget folder can be deleted and the option removed from your projects.
http://docs.nuget.org/docs/reference/package-restore
UPDATE: With the release of NuGet 4.x and .NET Standard 2.0, when you use the new csproj format you can now use package references, ironically reintroducing the dependency on msbuild to restore packages, but now packages are a first class citizen of msbuild. The link above also makes mention of the
PackageReference
, but the following announcement details it better:https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html
And the NuGet 4.x RTM announcement, which ironically isn't as useful:
https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html
UPDATE 2: Apparently with VS2017 you can even use package references with classic csproj projects, but they aren't backwards compatible anymore, and there have been some problems with restoring package sub-dependencies. I'm sure that will all be resolved.
You need to commit
.nuget\nuget.targets
, but notnuget.exe
. The targets will download the exe if it doesn't exist, as long as you changeDownloadNuGetExe
totrue
in nuget.targets