我在Visual Studio 2013中有一个解决方案。我使用Git。现在,每个项目都有自己的packages文件夹。我有两个问题,希望你能帮我。你建议我提交这些文件夹吗?对于在解决方案中使用nuget,基于MSBuild的软件包还原或自动软件包还原的最佳场景是什么?谢谢你的好意
tnkciper1#
建议的工作方式是让NuGet在构建过程中重新创建packages文件夹。当您可以访问包含您的包的包存储库时,将二进制文件添加到源代码管理中不是必需的,也不是明智的。您最多可以从packages文件夹提交repositories.config。所有的包内容都可以在构建过程中检索。您可以将repositories.config作为构建过程的提示,并且将此文件添加到源代码控制中的成本很低。有a complete explanation here:原始的NuGet工作流是将Packages文件夹提交到源代码控制中。原因是它与开发人员在没有NuGet时通常所做的事情相匹配:他们创建一个Lib或ExternalDependencies文件夹,将二进制文件转储到其中,并将其提交给源代码控制,以允许其他人进行构建。虽然这对一些用户来说工作得很好,但我们也从许多用户那里听说,将包提交到源代码控制并不是他们想要做的。当使用像Mercurial或Git这样的DVCS时,提交二进制文件会随着时间的推移疯狂地增加存储库的大小,使克隆变得越来越痛苦。事实上,这一直是NuGet问题跟踪器上的最高请求之一。好消息是,NuGet现在提供了一个工作流程,可以很好地解决这个问题,并且非常容易设置。下面是实现的方法:从NuGet 2. 0开始,在构建期间恢复软件包需要用户的明确同意。这必须在生成项目的每台计算机上完成。在Visual Studio中,启用“允许NuGet在构建期间下载缺少的包”。此设置位于选项->包管理器->常规下。允许NuGet下载缺少的包设置若要为未安装Visual Studio的生成服务器启用包还原,还可以将环境变量EnableNuGetPackageRestore设置为“true”。项目设置让我们假设您有一个已经使用NuGet或计划使用它的解决方案,并且您希望设置无提交工作流。右键单击解决方案资源管理器中的解决方案节点,然后选择启用NuGet包还原。启用NuGet包还原上下文菜单项就这样!都搞定了。细节那到底有什么用?它添加了一个名为.nuget的解决方案文件夹,其中包含NuGet.exe和NuGet.targets MsBuild文件。更具体地说,它下载并提取了两个NuGet包:NuGet.exe的NuGet.命令行和NuGet. targets的NuGet.Build。它还更改了解决方案中的每个项目,以导入NuGet.targets MsBuild任务。包含包还原文件的新解决方案文件夹最后,它添加了一个包含以下XML的NuGet.config文件:disableSourceControlIntegration设置指示TFS等版本控制系统不要将NuGet包文件夹添加到挂起签入列表中。有了这个,任何时候编译一个项目,构建任务都会查看每个项目的packages.config文件,并且对于列出的每个包,确保相应的包存在于packages文件夹中。对于任何丢失的包,构建任务将下载并解包。
packages
repositories.config
llycmphe2#
您可能应该下载the official recommended Visual Studio .gitignore file并将其放在存储库的根目录中。大多数git工具会自动检测这个文件,并使用它来忽略正确的文件和文件夹,包括但不限于nuget包文件夹。
2条答案
按热度按时间tnkciper1#
建议的工作方式是让NuGet在构建过程中重新创建
packages
文件夹。当您可以访问包含您的包的包存储库时,将二进制文件添加到源代码管理中不是必需的,也不是明智的。您最多可以从packages文件夹提交
repositories.config
。所有的包内容都可以在构建过程中检索。您可以将repositories.config作为构建过程的提示,并且将此文件添加到源代码控制中的成本很低。有a complete explanation here:
原始的NuGet工作流是将Packages文件夹提交到源代码控制中。原因是它与开发人员在没有NuGet时通常所做的事情相匹配:他们创建一个Lib或ExternalDependencies文件夹,将二进制文件转储到其中,并将其提交给源代码控制,以允许其他人进行构建。
虽然这对一些用户来说工作得很好,但我们也从许多用户那里听说,将包提交到源代码控制并不是他们想要做的。当使用像Mercurial或Git这样的DVCS时,提交二进制文件会随着时间的推移疯狂地增加存储库的大小,使克隆变得越来越痛苦。事实上,这一直是NuGet问题跟踪器上的最高请求之一。
好消息是,NuGet现在提供了一个工作流程,可以很好地解决这个问题,并且非常容易设置。下面是实现的方法:
从NuGet 2. 0开始,在构建期间恢复软件包需要用户的明确同意。这必须在生成项目的每台计算机上完成。
在Visual Studio中,启用“允许NuGet在构建期间下载缺少的包”。此设置位于选项->包管理器->常规下。
允许NuGet下载缺少的包设置
若要为未安装Visual Studio的生成服务器启用包还原,还可以将环境变量EnableNuGetPackageRestore设置为“true”。
项目设置让我们假设您有一个已经使用NuGet或计划使用它的解决方案,并且您希望设置无提交工作流。
右键单击解决方案资源管理器中的解决方案节点,然后选择启用NuGet包还原。
启用NuGet包还原上下文菜单项
就这样!都搞定了。
细节那到底有什么用?它添加了一个名为.nuget的解决方案文件夹,其中包含NuGet.exe和NuGet.targets MsBuild文件。更具体地说,它下载并提取了两个NuGet包:NuGet.exe的NuGet.命令行和NuGet. targets的NuGet.Build。它还更改了解决方案中的每个项目,以导入NuGet.targets MsBuild任务。
包含包还原文件的新解决方案文件夹
最后,它添加了一个包含以下XML的NuGet.config文件:
disableSourceControlIntegration设置指示TFS等版本控制系统不要将NuGet包文件夹添加到挂起签入列表中。
有了这个,任何时候编译一个项目,构建任务都会查看每个项目的packages.config文件,并且对于列出的每个包,确保相应的包存在于packages文件夹中。对于任何丢失的包,构建任务将下载并解包。
llycmphe2#
您可能应该下载the official recommended Visual Studio .gitignore file并将其放在存储库的根目录中。大多数git工具会自动检测这个文件,并使用它来忽略正确的文件和文件夹,包括但不限于nuget包文件夹。