3

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

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

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

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

为什么假设放置文件夹以“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 怎么能假设这种事情呢?

4

1 回答 1

2

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

我不确定该分配活动的含义或目的是什么,但如果没有它,它似乎对我们来说工作得很好。

删除此活动

于 2013-10-15T09:10:36.353 回答