我很难找到有关此的任何信息。我刚刚为我们的一个主要项目创建了一个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 怎么能假设这种事情呢?