使用NuGet和Source Control的多人团队

Vac*_*ano 14 version-control tfs visual-studio-2010 visual-studio nuget

我是一个使用Team Foundation Server进行源代码管理的双人团队.我开始了一个新的解决方案 对于该解决方案,我创建了几个项目 在其中许多我使用NuGet安装AutoMapper和Unity.然后我右键单击解决方案并选择"添加到源代码管理".然后,我检查了所产生的挂起更改.

我团队中的另一个人做了一个最新的,并且所有NuGet引用都失败了.

所以,我想我需要添加Packages文件夹.所以我做到了.

在我这样做之后,NuGet引用仍然失败(对他来说).

此外,当我尝试将NuGet包添加到文件时,我现在收到此错误:

访问路径'C:\ src\MyPath\ToMySolution\packages\repositories.config'被拒绝.

我假设这是因为repositories.config文件现在处于源代码控制之下(因此只有在手动签出之前它才会被读取).

那么,这是我的两个问题:

  1. 我如何或如何检查以便NuGet包在他最新的时候对我的同事有效?
  2. 当我需要使用NuGet时,有没有办法不必手动检查NuGet文件?

我做错了吗?或者NuGet是否真的不适合与源代码管理一起使用?

Xav*_*ter 11

编辑2014/03/31:不再需要基于MSBuild的手动包恢复启用,另请参阅http://xavierdecoster.com/migrate-away-from-msbuild-based-nuget-package-restore.

编辑2012/02/07:这是NuGet vsix的内置功能,称为启用包还原.

过时的替代品

有一个NuGet包,它叫做NuGetPowerTools.它在Visual Studio中向NuGet包管理器控制台添加了两个新命令,其中Enable-PackageRestore对您来说很有趣.

它将添加一个包含nuget.exe,nuget.settings.targets和nuget.targets的.nuget文件夹.运行启用包还原时,它将枚举解决方案中的所有项目,并在项目文件中添加导入nuget.targets语句(实际上是msbuild文件本身).

无论何时构建项目或整个解决方案,nuget都将获取该项目/解决方案的所有包,如packages.config文件中所定义.这发生在预构建步骤中.

简而言之:

  1. 不要办理登机手续
  2. 签入配置文件(repositories.config和packages.config文件)
  3. 使用启用包还原
  4. 签入.nuget文件夹

每当有人获取源代码时,无论是团队中的另一个开发人员还是构建代理,都会指示msbuild进程在预构建步骤中获取任何所需的包.

此外,当程序包未提交到TFS源代码管理时,您不会遇到只读标志问题,也不会与二进制文件合并冲突.

如果您愿意,您还可以在我的博客上查看此方法的底层推理.


BNL*_*BNL 5

不要检查包文件夹.

将以下预建事件添加到项目中:

$(SolutionDir)build\nuget install $(ProjectDir)packages.config -source \\server\path\NuGetPackages -o $(SolutionDir)packages
Run Code Online (Sandbox Code Playgroud)

如果不使用自定义包,则省略-source参数.

nuget.exe被检入$(SolutionDir)build \nuget

  • 创建项目是一个手动步骤.决定添加nuget包依赖是一个手动步骤.提交是一个手动步骤.获取最新信息是一个手动步骤...这都是一个手动步骤. (2认同)