【问题标题】:TFS silently fixes .sln files - Is there a way to stop it?TFS 静默修复 .sln 文件 - 有没有办法阻止它?
【发布时间】:2014-01-25 15:28:03
【问题描述】:

想象以下场景:

Solution1.sln 包含项目ABC。 (.NET 4.0,C#)

Solution2.sln 包含项目ABD。 (.NET 4.0,C#)

Solution2.sln 工作的开发人员在B 中添加了对D 的引用。显然,Solution1.sln 不再编译,因为它不包含 D(经过测试,以确保使用 VS2010、VS2013 和独立的 MSBuild)。

“问题”是运行Solution1.sln 的夜间构建工作正常,令人惊讶。当我查看构建服务器上的.sln 文件时,我发现它已被修改为添加缺少的项目。

乍一看,这似乎是一个不错的功能,但我宁愿意识到解决方案已被破坏,而不是构建可以神奇地工作。

有没有办法在 TFS2013 中关闭此功能?我非常肯定这不会发生在 TFS2010 中,但我不能说 TFS2012。

【问题讨论】:

  • 不应该那样做。您确定在构建框中修改了 sln 文件吗?能否打开服务器上的 sln 文件查看引用指向的位置?
  • @AdarshShah .sln 的“修改日期”比构建工作流程的“获取工作区”部分的所有其他文件晚一分钟。也许我应该提到缺少的项目 is 在工作区中,而不是在解决方案中。构建服务器上的.sln 文件包含对正确项目的引用。
  • 是项目引用还是程序集引用?
  • 这是一个与其他项目和解决方案位于同一目录的项目。我想它可以使用它的 GUID 找到正确的项目。
  • 当您说“在 Solution2.sln 中工作的开发人员在 B 中添加了对 D 的引用”。这是项目引用还是程序集引用?

标签: .net tfs


【解决方案1】:

解决方案只是一组项目,仅此而已。

当 MSBuild 在解决方案上工作时,它会计算构建顺序来分析项目和二进制引用——这个过程在 Visual Studio 和 Team Build(即 TFS)中是相同的。对于项目引用,它根据构建输出确定项目是否应该重建。只要 MSBuild 能够解析文件系统上的引用,一切都很好。

您将在 Visual Studio 中看到相同的行为:您只是收到警告,但构建成功。

团队构建对所有构建输出使用单个目录,因此您用于构建解决方案的顺序也会影响二进制引用。

【讨论】:

  • 正如我在问题中提到的,在 VS 和独立的 MSBuild 中构建失败。我没有收到任何警告...是否有任何设置可以更改以获得您提到的行为?
  • 我用 VS 2013.1 测试过,所以也许 MSBuild 12 有不同的行为,但我不这么认为。也许您的配置中缺少某些导致您出现问题的东西。
猜你喜欢
  • 2020-11-03
  • 2021-12-31
  • 2022-11-25
  • 2015-10-29
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多