使用较新版本的NuGet,可以将项目配置为自动还原NuGet程序包,从而packages
无需将该文件夹包含在源代码存储库中。好。
但是,此命令将添加一个新.nuget
文件夹,并且其中有一个二进制文件NuGet.exe。这也可以由Visual Studio自动重新创建,因此将其添加到版本控制中感觉不正确。但是,如果没有此文件夹,Visual Studio甚至无法正确加载解决方案。
你们如何处理?将.nuget添加到源代码管理?打开解决方案之前运行一些命令行脚本?
使用较新版本的NuGet,可以将项目配置为自动还原NuGet程序包,从而packages
无需将该文件夹包含在源代码存储库中。好。
但是,此命令将添加一个新.nuget
文件夹,并且其中有一个二进制文件NuGet.exe。这也可以由Visual Studio自动重新创建,因此将其添加到版本控制中感觉不正确。但是,如果没有此文件夹,Visual Studio甚至无法正确加载解决方案。
你们如何处理?将.nuget添加到源代码管理?打开解决方案之前运行一些命令行脚本?
Answers:
这篇文章很旧,您不应该再使用解决方案级别的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项目,但它们不再向后兼容,并且在恢复包子依赖项方面存在一些问题。我相信这一切都会解决。
Tools > Extensions & Updates > Updates
。
@Richard Szalay的答案是正确的-您不需要提交nuget.exe。如果由于某些原因Visual Studio不会自动下载nuget.exe,请确保在文件中将以下内容设置为truenuget.targets
:
<!-- Download NuGet.exe if it does not already exist -->
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
关闭VS解决方案,然后重新打开并进行构建。Visual Studio应该立即自动下载nuget.exe。
true
默认情况下未将其设置为吗?
您需要提交.nuget\nuget.targets
,但是不需要nuget.exe
。只要您在nuget.targets中更改DownloadNuGetExe
为目标,目标将下载该exe(如果不存在)。true
尽管我通常不喜欢在源代码管理中添加exe的想法,但我建议源代码管理应包含打开,构建和执行项目所需的任何内容。
在这种情况下,听起来好像.nuget文件夹是必需的依赖项。因此,它应该在源代码控制下。
剩下的唯一需要研究的问题是,如果该文件夹被标记为只读,NuGet将如何反应,一旦签入,TFS将执行该操作。
更新: 我对此进行了更多研究,因为我以前从未使用过NuGet。 http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
我建议您可能要做的是使NuGet成为必须在每个开发人员工作站上安装的要求。
此外,您应在源代码管理中放置使工作站准备好开始编辑项目所需的批处理文件。批处理文件将运行获取和安装依赖项包所需的命令。
除了我想说的以外,您可能想直接与NuGet联系,询问他们确切该如何工作。
<RestorePackages>true</RestorePackages>
* .csproj文件中的内容对于Visual Studio应该足够了,但也许不是。
现在nuget支持软件包还原,我们将对其进行更仔细的研究。
我们使用Subversion进行源代码控制,我最初的想法是.nuget
应将其添加到我们的存储库中,但应使用svn:externals进行添加,以使其指向单个位置。
这样,我们可以自动向所有开发人员和项目推出新版本。对于发行分支(而不是HEAD)上的项目,如果我们想不考虑nuget ,可以指定svn:externals参考的修订版。
我们有很多项目,因此这也意味着不要在存储库中重复nuget.exe
多次。