使用 NuGet 和源代码控制的多人团队 [英] Multiperson team using NuGet and source control

查看:26
本文介绍了使用 NuGet 和源代码控制的多人团队的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am on a two-man team using Team Foundation Server for our source control. I started a new solution. For that solution I created several projects. In many of them I used NuGet to install AutoMapper and Unity. I then right clicked on the solution and selected "Add to Source Control". I then checked in the resulting pending changes.

我团队中的另一个人做了最新的,所有的 NuGet 引用对他来说都失败了.

The other person on my team did a get latest and all of the NuGet references are failing for him.

所以,我想我需要添加 packages 文件夹.所以我就这么做了.

So, I figured I needed to add the packages folder. So I did that.

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

After I did that, the NuGet references are still failing (for him).

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

Also, when I try to add a NuGet Package to a file I get this error now:

对路径C:srcMyPathToMySolutionpackages epositories.config"的访问被拒绝.

Access to the path 'C:srcMyPathToMySolutionpackages epositories.config' is denied.

我认为这是因为 repositories.config 文件现在处于源代码控制之下(因此在手动签出之前它是只读的).

I assume this is because the repositories.config file is now under source control (so it is read only until manually checked out).

所以,这是我的两个问题:

So, here are my two questions:

  1. 我应如何签入或签入什么,以便在我的同事获取最新版本时 NuGet 包对他有效?
  2. 有没有办法在我需要使用 NuGet 时不必手动签出 NuGet 文件?

我做错了吗?还是说 NuGet 不适合与源代码管理一起使用?

Am I doing this wrong? Or is NuGet not really meant for use with source control?

推荐答案

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

Edit 2014/03/31: The manual MSBuild-based package restore enablement is no longer needed, see also http://xavierdecoster.com/migrate-away-from-msbuild-based-nuget-package-restore.

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

有一个 NuGet 包,它被称为 NuGetPowerTools.它向 Visual Studio 中的 NuGet 包管理器控制台添加了两个新命令,其中 Enable-PackageRestore 是您感兴趣的一个.

Obsolete Alternative

There is a NuGet package for that, it's called NuGetPowerTools. It adds two new commands to the NuGet Package Manager Console in Visual Studio, amongst which Enable-PackageRestore is the interesting one for you.

它将添加一个 .nuget 文件夹,其中包含 nuget.exe、nuget.settings.targets 和 nuget.targets.当您运行 enable package restore 时,它​​将枚举您的解决方案中的所有项目,并在项目文件(实际上是 msbuild 文件本身)中添加 import nuget.targets 语句.

It will add a .nuget folder which contains nuget.exe, nuget.settings.targets and nuget.targets. When you run enable package restore, it will enumerate all projects in your solution and add an import nuget.targets statement in the project files (which are actually msbuild files themselves).

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

Whenever you build a project or the entire solution, nuget will fetch all packages for that project/solution, as defined in the packages.config file. This happens in a pre-build step.

所以,简而言之:

  1. 请勿托运包裹
  2. 检查配置文件(repositories.config 和 packages.config 文件)
  3. 使用启用包还原
  4. 签入 .nuget 文件夹

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

Whenever someone gets the sources, whether that's another developer in the team or a build agent, the msbuild process will be instructed to fetch any required packages in a pre-build step.

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

Also, when the packages are not committed into TFS Source Control, you won't hit the read-only flag issues, or merge conflicts with binary files.

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

If you want, you can also check-out the underlaying reasoning for this approach on my blog.

这篇关于使用 NuGet 和源代码控制的多人团队的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆