如何在MSBuild中使用Team Build属性?

7

我有一个使用默认流程模板的简单的tfs-2010构建定义。在其中,我使用$(BuildID)定义了生成编号格式,以定义计算字段的一部分。这样可以正常工作,我可以看到BuildID的值。

现在我尝试将BuildID属性作为参数传递给MSBuild:

/p:SomeProperty=$(BuildID)

然而当我查看构建日志时,我发现SomeProperty字面上等于$(BuildID),而不是BuildID的值。
我错过了什么吗?
为了更清晰地表达:我的问题是如何在构建定义中引用作为构建过程参数。例如,构建编号格式具有默认表达式$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)。
1个回答

4
你需要使用VB.NET表达式。例如:
String.Format("/p:SomeProperty={0}", BuildDetail.BuildNumber)

构建号标记,例如$(BuildDefinitionName),是特定于“构建号格式”处理参数的。 它们不是您可以在构建过程中任何其他位置使用的标记。 大多数标记都可在BuildDetail对象或环境中使用。 但是,构建Id有点特殊。 它来自构建表的标识列,并且没有直接公开在我们的公共API中。 您可以从BuildNumber中提取它,如下所示:
BuildDetail.BuildNumber.Substring(BuildDetail.BuildNumber.LastIndexOf('/') + 1)

请注意,您需要直接在XAML中执行此操作,而不是将VB表达式放入构建过程参数编辑器GUI中。这是因为这些值只会作为文字字符串传递。

1
那么,如果不自定义工作流程,就没有办法做类似于/p:SomeProperty=BuildDetail.BuildNumber.Subtring(...)的事情吗?如果是这样的话,那就很不幸了。 - Christopher Painter
1
我尝试使用String.Format函数作为“MSBuild Arguments”的参数,例如:String.Format("/p:DeployIisAppPath=/mobile/changeset/{0}", BuildDetail.SourceGetVersion),但是它不起作用。我真的可以将这样的函数写入“MSBuild Arguments”中并进行评估吗? - Konrad
Konrad和Chris是正确的;将String.Format放入MSBuild参数中是行不通的。 - Mike
1
这个答案不正确,我不能像@JimLamb建议的那样添加VB表达式。 - Konstantin
@Jim- 我希望有一种方法。可以很好地将表达式放在那里,让工作流程进行格式化,而无需编辑工作流程。 - Christopher Painter
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接