“那”是怎么回事;“原因”;TFS 2010版本中的属性

“那”是怎么回事;“原因”;TFS 2010版本中的属性,tfs,msbuild,tfsbuild,Tfs,Msbuild,Tfsbuild,当我们使用TFS 2008(SP1)时,我们曾经能够访问“Reason”MSBuild属性,该属性包含生成运行的原因。这在构建一开始就可用,因此不需要任务/目标来获取它。现在我们正在使用TFS 2010(和MSBuild/Upgrade模板,而不是工作流),并且不再填充该属性。我可以编写一个自定义任务来从IBuildDetail检索信息,但我的MSBuild脚本是否有一个立即可用的属性?我以前能够基于生成原因执行有条件的MSBuild脚本导入,如果我必须使用任务/目标来获取原因,这将不起作用。您

当我们使用TFS 2008(SP1)时,我们曾经能够访问“Reason”MSBuild属性,该属性包含生成运行的原因。这在构建一开始就可用,因此不需要任务/目标来获取它。现在我们正在使用TFS 2010(和MSBuild/Upgrade模板,而不是工作流),并且不再填充该属性。我可以编写一个自定义任务来从IBuildDetail检索信息,但我的MSBuild脚本是否有一个立即可用的属性?我以前能够基于生成原因执行有条件的MSBuild脚本导入,如果我必须使用任务/目标来获取原因,这将不起作用。

您仍在使用MSBuild脚本,因此我假设您使用的是升级模板。您可以克隆/编辑或修改升级模板,以便该模板采用当前生成原因,并通过“为配置文件夹运行TfsBuild”活动将其传递给MSBuild。在Visual Studio中打开模板进行编辑,然后执行以下操作:

选择“在代理上运行”活动,然后转到“变量”选项卡。创建一个新变量以存储生成原因,并使用IBuildDetail中的信息填充其默认值。在变量列表中添加如下内容:

Name: currentBuildReason
Variable type: String
Scope: Run On Agent
Default: BuildDetail.Reason.ToString()
接下来,单击运行TfsBuild for Configuration文件夹活动的属性对话框。选择命令行参数省略号打开将参数传递给TFSBuild的对话框。您可能只看到列出了一个变量:

MSBuildArguments
现在,您可以将当前生成原因添加到命令行参数(并且仍然传递任何现有的MSBuildArguments),如下所示:

String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments)
单击“确定”关闭对话框。它将当前生成原因作为名为CurrentBuildReason的新参数传递,并且可以在MSBuild脚本中作为$(CurrentBuildReason)引用

保存并签入升级模板。 将模板指定给生成定义。该定义使用的MSBuild脚本现在可以使用上述变量