.nu​​get文件夹是否应该添加到版本控制?

使用较新版本的NuGet,可以configuration一个项目来自动恢复NuGet软件包,这样packages文件夹不需要包含在源代码库中。 好。

但是,这个命令添加了一个新的.nuget文件夹,那里有一个二进制文件NuGet.exe。 这也可以由Visual Studio自动重新创build,因此将其添加到版本控制上感觉不正确。 但是,如果没有此文件夹,Visual Studio甚至不会正确加载解决scheme。

你们怎么处理这个问题? 将.nuget添加到源代码pipe理? 打开解决scheme之前运行一些命令行脚本?

这篇文章是旧的,你不应该使用解决scheme级别的NuGet包恢复了。 从版本2.7+开始,NuGet设置中有一个选项可以在构build时自动恢复软件包。 所以.nuget文件夹可以被删除,并从你的项目中删除选项。

http://docs.nuget.org/docs/reference/package-restore

更新:随着NuGet 4.x和.NET标准2.0的发布,当你使用新的csproj格式时,你现在可以使用包引用,讽刺地重新引入对msbuild的依赖来恢复包,但现在包是一等公民msbuild 。 上面的链接也提到了PackageReference ,但是下面的公告详细说明了它:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

而NuGet 4.x RTM的公告,具有讽刺意味的是没有那么有用:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

@Richard Szalay的回答是正确的 – 你不需要提交nuget.exe。 如果由于某些原因,Visual Studio不会自动下载nuget.exe,请确保在nuget.targets文件中将以下设置为true

 <!-- Download NuGet.exe if it does not already exist --> <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe> 

closuresVS解决scheme,重新打开并构build它。 Visual Studio应该现在自动下载nuget.exe。

根据这个线程 ,.nuget文件夹应该受版本控制。

您需要提交.nuget\nuget.targets ,而不是nuget.exe 。 如果目标不存在,目标将下载exe,只要您在nuget.targets中将DownloadNuGetExe更改为true

虽然我通常不喜欢把exe文件添加到源代码pipe理的想法,但是我build议源代码pipe理应该包含为打开,编译和执行项目所需的任何东西。

在这种情况下,它听起来像.nuget文件夹是必需的依赖项。 因此应该受到源头控制。

唯一需要研究的问题是,如果该文件夹被标记为只读,则NuGet将如何反应,一旦该文件夹已经签入,该文件夹将被标记为只读。


更新:我做了一些更多的研究,因为我以前从未使用过NuGet。 http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

我会build议,可能你想要做的是使NuGet成为必须安装在每个开发人员工作站上的要求。

此外,您应该在源代码控制中放置batch file,以使工作站能够开始编辑项目。 batch file将运行获取和安装依赖包所需的命令。

除此之外,我想说你可能想直接联系NuGet来问他们,这究竟是如何工作的。

现在,nuget支持软件包恢复,我们正在更密切地关注它。

我们使用Subversion进行源代码控制,我最初的想法是.nuget应该被添加到我们的仓库中,但是使用svn:externals添加,以便它指向一个位置。

这样我们可以自动推出新的版本给所有的开发者和项目。 对于发布分支上的项目,而不是HEAD,如果我们想离开nuget,我们可以指定修改svn:externals引用。

我们有很多的项目,所以这也意味着不要在repo中多次复制nuget.exe

我们在文件夹中有nuget.config文件,因为它具有对我们内部的Nuget服务器的引用,使用Package Sources区域: https ://docs.nuget.org/consume/nuget-config-settings

除此之外,您应该让Visual Studio处理软件包的下载。