Visual studio 是否应将.nuget文件夹添加到版本控制?

Visual studio 是否应将.nuget文件夹添加到版本控制?,visual-studio,version-control,nuget,Visual Studio,Version Control,Nuget,对于较新版本的NuGet,可以将项目配置为自动恢复NuGet软件包,以便源代码存储库中不需要包含软件包文件夹。好 但是,此命令会添加一个新的.nuget文件夹,其中有一个二进制文件,即nuget.exe。这也可以由VisualStudio自动重新创建,因此将其添加到版本控制中是不正确的。但是,如果没有此文件夹,VisualStudio甚至无法正确加载解决方案 你们这些人是怎么处理的?将.nuget添加到源代码管理?在打开解决方案之前运行一些命令行脚本?虽然我通常不喜欢将exe添加到源代码管理中,

对于较新版本的NuGet,可以将项目配置为自动恢复NuGet软件包,以便源代码存储库中不需要包含
软件包
文件夹。好

但是,此命令会添加一个新的
.nuget
文件夹,其中有一个二进制文件,即nuget.exe。这也可以由VisualStudio自动重新创建,因此将其添加到版本控制中是不正确的。但是,如果没有此文件夹,VisualStudio甚至无法正确加载解决方案


你们这些人是怎么处理的?将.nuget添加到源代码管理?在打开解决方案之前运行一些命令行脚本?

虽然我通常不喜欢将exe添加到源代码管理中,但我建议源代码管理应该包含打开、构建和执行项目所需的任何内容

在本例中,听起来.nuget文件夹是必需的依赖项。因此,它应该受到源头控制

剩下的唯一问题是,您需要研究的是,如果该文件夹被标记为只读,NuGet将如何反应,TFS将在其签入后执行此操作


更新: 我在这方面做了更多的研究,因为我以前从未使用过NuGet

我建议您可能要做的是使NuGet成为一个必须安装在每个开发人员工作站上的需求

此外,您应该在源代码管理中放置使工作站准备好开始编辑项目所需的批处理文件。批处理文件将运行获取和安装依赖项包所需的命令


除此之外,我想说您可能想直接联系NuGet,询问他们这到底应该如何工作。

根据,应该对.NuGet文件夹进行版本控制。

现在NuGet支持包恢复,我们正在更仔细地研究它

我们使用Subversion进行源代码控制,我最初的想法是,
.nuget
应该添加到我们的存储库中,但是使用添加,以便它指向单个位置

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


我们有很多项目,因此这也意味着不要在repo中重复多次
nuget.exe

您需要提交
.nuget\nuget.targets
,而不是
nuget.exe
。如果exe不存在,目标将下载,只要您在nuget.targets中将
DownloadNuGetExe
更改为
true
。Richard Szalay的答案是正确的-您不需要提交nuget.exe。如果由于某些原因Visual Studio没有自动下载nuget.exe,请确保在
nuget.targets
文件中将以下设置为true


真的

关闭VS解决方案,重新打开并构建它。Visual Studio现在应该自动下载nuget.exe。

这篇文章很旧,您不应该再使用解决方案级别的nuget包还原。从版本2.7+开始,NuGet安装程序中有一个选项可以在生成时自动恢复包。 因此,可以删除.nuget文件夹,并从项目中删除该选项

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

还有NuGet 4.x RTM发布,讽刺的是它没有那么有用:


更新2:显然,在VS2017中,您甚至可以将包引用用于经典的csproj项目,但它们不再向后兼容,并且在恢复包子依赖项时出现了一些问题。我相信这一切都会得到解决。

我们在文件夹中有
nuget.config
文件,因为它引用了我们的内部nuget服务器,使用包源区域:


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

我认为*.csproj文件中的
true
应该足够Visual Studio使用,但可能不是。我无法让NuGet还原外部项目包。这对你有用吗?是的,尽管NuGet.exe在Powershell或扩展插件正常工作时,对我们的本地repo(IIS 6+SSL+AD身份验证)进行身份验证时出现问题。顺便说一句,有人知道为什么默认情况下它没有设置为
true
?这更多是一个隐私问题。“通过Internet发出请求的简单行为可以显示有关用户的信息(例如,从用户的IP地址,我们可以大致了解她的位置)。”请参阅仅供参考:当.NuGet文件夹中不存在NuGet.exe时,解决方案的上下文菜单将显示“启用NuGet包还原”,即使已配置NuGet包还原。在构建之后,选项将消失。这应该是可接受的答案,我认为。。。如果NuGet.exe是超小的,我可能会说,把它放在源代码管理中,处理你在忽略文件中必须做的任何事情。但是它是1.5兆,这对我来说足够大,可以按照Gan的方式来做。它在哪里下载nuget.exe表格?如果我的buildserver没有internet怎么办?这是最可靠的链接,因为它是一个旧线程。我只想分享评论中的信息。。。关于如何迁移。底部的阅读列表中有一个@CAD家伙,是的,谢谢你缩小范围。你可以使用
Tools>Extensions&Updates>Updates
轻松更新VS中的Nuget。