使用较新版本的NuGet,可以配置项目以自动恢复NuGet包,以便packages
文件夹不需要包含在源代码存储库中。好。
但是,此命令会添加一个新的.nuget
文件夹,并且还有一个二进制文件NuGet.exe。这也可以由Visual Studio自动重新创建,因此将其添加到版本控制感觉不正确。但是,如果没有此文件夹,Visual Studio甚至无法正确加载解决方案。
你们如何处理这个问题?将.nuget添加到源代码管理中?在打开解决方案之前运行一些命令行脚本?
答案 0 :(得分:46)
@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>
关闭VS解决方案,重新打开并构建它。 Visual Studio现在应该自动下载nuget.exe。
答案 1 :(得分:46)
这篇文章很老了,你不应该再使用解决方案级别的NuGet包恢复了。从版本2.7+开始,NuGet设置中有一个选项可以自动恢复构建版本的包。 因此可以删除.nuget文件夹,并从项目中删除该选项。
http://docs.nuget.org/docs/reference/package-restore
更新:随着NuGet 4.x和.NET Standard 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
更新2:显然,使用VS2017,您甚至可以使用经典csproj项目的软件包引用,但它们不再向后兼容,并且恢复软件包子依赖项时出现了一些问题。我相信一切都会得到解决。
答案 2 :(得分:22)
根据this thread,.nuget文件夹应该受版本控制。
答案 3 :(得分:20)
您需要提交.nuget\nuget.targets
,而不是nuget.exe
。只要您在nuget.targets中将DownloadNuGetExe
更改为true
,目标就会下载exe(如果它不存在)
答案 4 :(得分:4)
虽然我通常不喜欢将exe添加到源代码控制中,但我建议源代码控制应该包含打开,构建和执行项目所需的任何内容。
在这种情况下,听起来.nuget文件夹是必需的依赖项。因此它应该受到源头控制。
你需要研究的唯一问题是,如果该文件夹被标记为只读,NuGet将如何做出反应,一旦签入,TFS将会这样做。
<强>更新强> 我对此做了一些研究,因为我之前从未使用过NuGet。 http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
我建议您可能要做的就是让NuGet成为必须在每个开发人员工作站上安装的要求。
此外,您应该在源代码管理中放置使工作站准备好开始编辑项目所需的批处理文件。批处理文件将运行获取和安装依赖包所需的命令。
除此之外我还说你可能想直接联系NuGet,询问他们究竟应该如何运作。
答案 5 :(得分:1)
现在nuget支持包恢复,我们正在更仔细地研究它。
我们使用Subversion进行源代码管理,我最初的想法是.nuget
应该添加到我们的存储库中,但是使用svn:externals添加它以便它指向一个位置。
这样我们就可以自动将新版本推送给所有开发人员和项目。对于发布分支上的项目而不是HEAD,如果我们想单独留下nuget,我们可以指定 svn:externals 引用的修订版。
我们有很多项目,所以它也意味着不会在回购中多次复制nuget.exe
。
答案 6 :(得分:1)
我们在文件夹中有nuget.config
文件,因为它具有对我们内部Nuget服务器的引用,使用Package Sources区域:
https://docs.nuget.org/consume/nuget-config-settings
除此之外,您应该让Visual Studio处理软件包的下载。