【问题标题】:TFS failing gated checkin when merging back to trunk合并回主干时 TFS 未通过门控签入
【发布时间】:2012-11-18 22:40:13
【问题描述】:

在以下场景中遇到 TFS 和 TFS CI 问题(我已对其进行了简化,尽管它本质上是相同的问题):

  1. 我有一个主干(一个 VS 解决方案中的一组 csprojs)
  2. 我有一个分支(从树干上取下来) -- 在这个分支中,我创建了一个新文件,比如“MyRepository.cs”
  3. 我将分支合并回主干 -- 一切似乎都很好......(在待定更改中,文件被标记为“合并,分支”)
  4. 我将合并的待处理更改签入到主干
  5. 这将启动 TFS 中的门控签入
  6. 这失败了,我从 TFS CI 收到一条消息:

“CSC:找不到源文件'Repositories\MyRepository.cs'”

“TF270015:‘MSBuild.exe’返回了意外的退出代码。预期为‘0’;实际为‘1’。”

当我签入 MyRepository.cs 文件时,我显然在 csproj 文件中签入了包含 MyRepository.cs 的程序集。这个 csproj 具有包含新 cs 文件的行,即:

<Compile Include="Repositories\MyRepository.cs" />

所以问题是我不明白为什么 TFS 抱怨 .cs 文件不存在,即使我正在签入它并且它包含在 csproj 文件中。

我怀疑我从分支合并到主干这一事实导致了问题,但我不知道为什么。我对 TFS CI 比较陌生,所以任何关于现在去哪里的指针都会有很大的帮助。

更新 - 此后发现 TFS CI 使用的源文件的工作目录没有将 MyRepository.cs 文件拉入其中,也没有拉入最新(签入集)版本的.csproj 文件(看起来仍然是旧的主干版本)。这似乎很奇怪,因为错误消息(上图)暗示它获取了 .csproj 但没有获取 MyRepository.cs 文件。

【问题讨论】:

    标签: visual-studio-2010 tfs msbuild


    【解决方案1】:

    原来这是因为 TFS 构建代理使用的帐户没有检索分支的权限(或任何其他权限)。所以我更新的文件和从分支合并到主干的新文件没有出现在主干构建中。有点烦人的是,TFS 没有明确地抱怨这一点,而是直接使用旧的主干文件(或者如果它确实抱怨我在日志中找不到它)。

    总结:在分支上授予构建代理帐户权限解决了问题。

    【讨论】:

      【解决方案2】:

      嗯,错误表明 csproj 文件中确实有您的更改,因为编译器正在寻找该文件。但是,它也表明实际的 cs 文件不是签入的一部分,或者它被签入到与 csproj 文件所期望的位置不同的位置。另一种可能的解决方案(如果您已验证其他两个)是您的构建工作区不知何故没有包含 Repositories 文件夹的映射。

      【讨论】:

      • .cs 文件肯定是签入的一部分。它的文件夹位置(待更改)也是正确的。虽然我不完全确定您所说的“构建工作区”是什么意思;),但我已经在 Repositories 文件夹中有现有文件并且它们不会导致问题(以前没有) - 所以我不认为它是文件夹位置。跨度>
      • 在构建定义中有一个用于映射工作空间的选项卡,这就是构建知道要下拉哪些文件的方式。诊断它的一种方法是从待处理的更改中创建一个架子集。删除工作站上的所有文件,并在选中两个覆盖复选框的情况下执行获取特定版本。完成后,把你的架子放回去,看看 ti 是如何在本地编译的。我从未见过这种失败,你必须有一些不正确的地方,这将帮助你解决问题。
      猜你喜欢
      • 2014-12-08
      • 1970-01-01
      • 2012-06-11
      • 2010-09-07
      • 2011-07-24
      • 2017-08-07
      • 2016-08-02
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多