TFS'$(BuildLocation)'宏指向实验室环境模板上的错误路径

时间:2013-07-30 18:04:35

标签: tfs automated-tests workflow-foundation-4 tfsbuild buildconfiguration

我很难找到有关此事的任何信息。我刚刚为我们的一个主要项目创建了一个Build-Deploy-Test构建定义,但是当工作流运行时,它会报告“$(BuildLocation)”宏的错误值,这会破坏部署阶段以后的所有内容(测试也试图在这条错误的路径上运行。)

我知道导致问题的原因,但我不知道如何修复它。我们将实验室重定向到的构建定义被配置为构建我们的解决方案的“发布”配置。 drop文件夹是“\ outputServer \ drops”。我希望BuildLocation宏返回"\\outputServer\drops\<BuildName>\<BuildNameFormat>",但宏返回"\\outputServer\drops\<BuildName>\<BuildNameFormat>\Release"

我最初认为这是LabDefaultTemplate.11.xaml模板(我正在尝试使用的模板)和旧DefaultTemplate.xaml之间的不兼容性,我将自定义模板基于此模板。我尝试更新自定义模板以将新默认值(DefaultTemplate.11.1.xaml)作为基础,但在转换模板后,问题仍然存在。

即使查看DefaultTemplate.11.1上的代码,我仍然看不到它根据配置名称过滤输出。其中唯一的处理是基于解决方案或项目名称,默认情况下禁用(由“高级”类别下的“特定于解决方案的构建输出”选项控制,在构建定义配置上)。

为什么假设drop文件夹以'Release'结尾,而删除的输出根本没有放在这个文件夹中?我设法通过在路径上添加“..”来使部署脚本正常运行,就像这个$(BuildLocation)\..\myScript一样,但是当工作流尝试运行自动化测试时,它似乎正在使用同一个宏,显然没有'找到测试dll。

通过不在定义选项中的“要构建的项目”元素上指定构建配置(从而让它选择默认选项),可以解决这个问题,但指定配置是我们有意识的决定,因为文件存在差异,并且在发布模式下构建项目时,某些配置会有不同的转换。

我目前正在使用VS2012 Update 3 / TFS 2012 Update 2,这对任何人都有帮助。

更新

好的,我发现它在模板内部的位置。实验室工作流程非常简单的事实有助于此。

Compute build location needed'if语句'中,有一个似乎正在进行这种奇怪连接的赋值。这是代码:

If(LabWorkflowParameters.BuildDetails.Configuration Is Nothing, BuildLocation, If(LabWorkflowParameters.BuildDetails.Configuration.IsEmpty Or (SelectedBuildDetail.Information.GetNodesByType(Microsoft.TeamFoundation.Build.Common.InformationTypes.ConfigurationSummary, True)).Count = 1, BuildLocation, If(LabWorkflowParameters.BuildDetails.Configuration.IsPlatformEmptyOrAnyCpu, BuildLocation + "\" + LabWorkflowParameters.BuildDetails.Configuration.Configuration, BuildLocation + "\" + LabWorkflowParameters.BuildDetails.Configuration.Platform + "\" + LabWorkflowParameters.BuildDetails.Configuration.Configuration)))

我甚至不确定这是什么意思。这种行为似乎对我来说是个错误,因为构建模板本身(不是实验室模板)不会进行此连接。 LabTemplate如何承担这类事情?

1 个答案:

答案 0 :(得分:2)

只是从LabDefaultTemplate构建过程模板中删除活动似乎有效。

我不确定Assign活动的含义或目的是什么,但如果没有它,它似乎对我们没用。

Remove This Activtiy