首页 文章

应该将.nuget文件夹添加到版本控制吗?

提问于
浏览
106

使用较新版本的NuGet,可以配置项目以自动恢复NuGet包,以便 packages 文件夹不需要包含在源代码存储库中 . 好 .

但是,此命令添加了一个新的 .nuget 文件夹,其中有一个二进制文件NuGet.exe . 这也可以由Visual Studio自动重新创建,因此它甚至不能正确加载解决方案 .

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

7 回答

  • 46

    这篇文章很老了,你不应该再使用解决方案级别的NuGet包恢复了 . 从版本2.7开始,NuGet设置中有一个选项可以自动恢复构建包 . 因此可以删除.nuget文件夹,并从项目中删除该选项 .

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

    UPDATE: 随着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

    UPDATE 2: 显然,使用VS2017,您甚至可以使用经典csproj项目的包引用,但它们并非't backwards compatible anymore, and there have been some problems with restoring package sub-dependencies. I'确定将全部解决 .

  • 22

    @Richard Szalay 's answer is right - you don' t需要提交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

    根据this thread,.nuget文件夹应该受版本控制 .

  • 4

    您需要提交 .nuget\nuget.targets ,但不提交 nuget.exe . 只要你在nuget.targets中将 DownloadNuGetExe 更改为 true ,目标就会下载exe(如果它不存在)

  • 46

    虽然我通常不喜欢将exe添加到源代码控制的想法,但我建议源代码控制应包含打开,构建和执行项目所需的任何内容 .

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

    你需要研究的唯一问题是,如果该文件夹被标记为只读,NuGet将如何做出反应,一旦签入,TFS将会做什么 .


    Update: 我对此做了一些研究,因为我之前从未使用过NuGet . http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

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

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

    除此之外,我会说你可能想直接联系NuGet询问他们究竟应该如何运作 .

  • 20

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

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

    这样我们就可以自动将新版本推送给所有开发人员和项目 . 对于发布分支上的项目而不是HEAD,如果我们想单独留下nuget,我们可以指定svn:externals引用的修订版 .

    我们有很多项目,所以它也意味着不会在回购中多次重复 nuget.exe .

  • 1

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

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

相关问题