【问题标题】:TFS building incorrect version of project on build server but builds correct version locallyTFS 在构建服务器上构建不正确的项目版本,但在本地构建正确的版本
【发布时间】:2014-07-10 10:23:48
【问题描述】:

我的问题是“当我在我的构建服务器上构建一个项目时,它没有得到正确的版本。但是当我在本地构建它时,它确实得到了正确的版本”

我怎么知道这个? ...当我打开文件时,在构建服务器上,内容不是它们应该是的,因为它们在 TFS 中。

我正在使用 Visual Studio 2013 和 WIX 3.8。在我的构建服务器上,我有 wix 3.8。

我有一个 WIX 安装程序 (INSTALLER XYZ),它引用了项目 A。 项目 A 里面有一个 configuration.config 文件。 configuration.config 文件对于 MSI 的工作至关重要。当我在本地构建“安装程序 XYZ”并安装它时,一切正常。

当我(在构建服务器上)运行构建时,它会构建“安装程序 XYZ”并生成一个 .msi 文件。当我安装 .msi 文件时出现错误。安装失败。 经过调查,我发现当我在构建服务器上构建时,引用项目 A configuration.config 文件的“安装程序 XYZ”使用的是该文件的旧版本,而不是最新版本。我不明白为什么会这样。

如果我使用在本地构建的 .msi,它可以正常安装,但是当我使用构建在构建服务器上的 .msi 时,它不会安装。

让我解释一下我尝试过的一些事情......

  1. 除了这个 configuration.config 文件之外,msi 完全相同。我使用了 LessMsi 和 Orca 工具来检查 .msi。
  2. 当我在构建服务器上构建项目时,我检查了 configuration.config 文件,它与 Project A 中的不同
  3. 我在构建之前从 TFS 获得了最新信息。在构建之前,我已经从 TFS 获取了特定文件并覆盖了所有文件。
  4. 我已展开项目 A 并右键单击 configuration.config 文件并选择属性。属性“COPY TO OUTPUT DIRECTORY”设置为 COPY ALWAYS。
  5. 我的 WIX 安装程序正在正确收集文件。我已经使用Source="$(var.Connectors.AgentService.TargetDir)" 重新创建了我的 .WXS 文件并正确引用了项目 A
  6. 在我的构建服务器上,我删除了所有工作区。
  7. 我已删除我的构建服务帐户创建的所有工作空间。
  8. 我的构建定义“Clean Workspace”设置为“All”
  9. 我已重新启动计算机和构建服务器

总而言之,我知道问题出在哪里,但我不确定是什么原因造成的......有人可以建议吗?

2014 年 5 月 22 日更新

所以我已经进一步调查了,

我在同一个解决方案中有另一个名为 Project.B 的项目 Project.B 还有一个 configuration.config 文件。

似乎正在构建项目 B 中的 configuration.config 文件。我通过更改 project.B configuration.config 文件的内容并重建它来测试这一点。但是,我的 WIX 安装程序引用了项目 A configuration.config 文件。 似乎在同一解决方案中的两个项目之间的构建过程变得混乱。

有人知道为什么会这样吗?

【问题讨论】:

  • 所以,第 2 点。 “不一样”从何而来?在构建服务器上执行 ctrl+f 以搜索旧服务器所在的位置。
  • @Erti-ChrisEelmaa 来自 TFS。它获得了该文件的旧版本。例如,如果文件现在是第 4 版,则构建服务器仍然获得第 1 版。但是当我在本地(而不是在构建服务器上)构建时,它会获得第 4 版。
  • 听起来很有趣。所以本质上,只是为了确认:这个问题与 WiX 无关?完全是 TFS 问题?

标签: visual-studio tfs build wix build-process


【解决方案1】:

在 TFS 构建中,所有文件都复制到一个 bin 文件夹中。但是,Visual Studio 具有“每个项目的 bin 文件夹”结构。

这可以解释为什么您的 configuration.config 会被 projectB 覆盖。它们都被复制到同一个文件夹中。

您可以通过将此属性添加到构建定义中来再次拆分文件夹结构:

注意标志/p:GenerateProjectSpecificOutputFolder=true

【讨论】:

  • 什么意思?给定的解决方案对您不起作用吗?或者您是说这可行,但它并不是您真正想要的解决方案?
  • 它没有回答我最初的问题“有人知道为什么会发生这种情况吗?”不过,您的建议确实有效。
  • 好吧,我已经回答了为什么会这样。发生这种情况是因为 TFS 将所有内容构建到一个 bin 文件夹中,并且发生了覆盖。如果您想知道他们为什么这样做,我无法评论他们的选择,但从他们的角度来看,这似乎是一个糟糕的选择。他们可能不认为 WiX 是在 TFS Build 上构建的——我个人遇到过很多 Wix+TFS Build 的错误(收获的文件被锁定、wix 构建顺序不正确、bin 文件夹问题......)。
  • 如果您考虑 TFS BUild 必须做的事情:它必须验证解决方案是否成功编译 - 它不必生成“有效”安装程序。因此,是否发生“bin”文件夹中的覆盖并不重要。
  • 谢谢。我无法将您的回复作为答案,因为我目前的声誉为“1”,而您需要的最低代表为“15”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多