0

在以下场景中遇到 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 文件时,我显然签入了包含 MyRepository.cs 的程序集的 csproj 文件。这个 csproj 具有包含新 cs 文件的行,即:

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

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

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

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

4

2 回答 2

1

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

摘要:授予分支上的构建代理帐户权限解决了该问题。

于 2012-12-03T16:40:07.247 回答
0

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

于 2012-11-30T17:18:35.087 回答