2

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

4

1 回答 1

1

您仍在使用 MSBuild 脚本,因此我假设您使用的是升级模板。您可以克隆/编辑或修改升级模板,以便模板采用当前构建原因并通过Run TfsBuild for Configuration Folder活动将其传递给 MSBuild。在 Visual Studio 中打开模板进行编辑并执行以下操作:

选择Run On Agent活动并转至变量选项卡。创建一个新变量来存储构建原因并使用来自 IBuildDetail 的信息填充其默认值。将类似以下内容添加到变量列表中:

Name: currentBuildReason
Variable type: String
Scope: Run On Agent
Default: BuildDetail.Reason.ToString()

接下来,单击Run TfsBuild for Configuration Folder活动的 Properties 对话框。选择CommandLineArgument省略号以打开将参数传递给 TFSBuild 的对话框。您可能只会看到列出的一个变量:

MSBuildArguments

您现在可以将当前构建原因添加到命令行参数(并且仍然传递任何现有的 MSBuildArguments),类似于:

String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments)

单击确定关闭对话框。这会将当前构建原因作为名为 CurrentBuildReason 的新参数传递,并且可以在您的 MSBuild 脚本中以 $(CurrentBuildReason) 的形式引用。

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

于 2013-02-06T16:44:19.577 回答