当我们使用TFS 2008(SP1)时,我们曾经能够访问“Reason”MSBuild属性,该属性包含构建运行的原因。一旦构建开始就可以使用它,因此不需要任何/目标来获取它。现在我们正在使用TFS 2010(和MSBuild /升级模板,而不是工作流),并且不再填充该属性。我可以编写一个自定义任务来从IBuildDetail中检索信息,但是我的MSBuild脚本没有立即可用的属性吗?我曾经能够根据构建原因进行条件MSBuild脚本导入,如果我必须使用任务/目标来获取原因,这将无效。
答案 0 :(得分:1)
您仍在使用MSBuild脚本,因此我假设您使用的是升级模板。您可以克隆/编辑或修改升级模板,以便模板获取当前构建原因并通过运行TfsBuild for Configuration Folder 活动将其传递给MSBuild。在Visual Studio中打开要编辑的模板,然后执行以下操作:
选择运行代理活动,然后转到“变量”标签。创建一个新变量来存储构建原因,并使用IBuildDetail中的信息填充其默认值。将以下内容添加到变量列表中:
Name: currentBuildReason
Variable type: String
Scope: Run On Agent
Default: BuildDetail.Reason.ToString()
接下来,单击运行TfsBuild for Configuration Folder 活动的“属性”对话框。选择 CommandLineArgument elipses以打开将参数传递给TFSBuild的对话框。您可能只看到列出的一个变量:
MSBuildArguments
您现在可以将当前构建原因添加到命令行参数(并仍然传递任何现有的MSBuildArguments),类似于:
String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments)
单击“确定”关闭对话框。这会将当前构建原因作为名为CurrentBuildReason的新参数传递,并且可以在MSBuild脚本中将其引用为$(CurrentBuildReason)。
保存并签入升级模板。 将模板分配给构建定义。该定义使用的MSBuild脚本现在可以使用上述变量。