【问题标题】:In a TFS build definition, can a variable be defined in terms of another variable?在 TFS 构建定义中,可以根据另一个变量来定义一个变量吗?
【发布时间】:2016-03-04 14:40:28
【问题描述】:

我有一个工作的 MSBuild 文件,其中包含我想在 TFS 构建中运行的某些目标。目标依赖于已定义的某些环境变量和 MSBuild 属性。我的 TFS 构建定义编辑器中有一个“变量”选项卡,我可以在其中表面上设置变量的值,以便在目标运行时确实定义它们,但似乎只允许文字值 - 如果我想定义一个变量对于另一个变量(例如%OTHER_VARIABLE%\subfolder),没有发生变量扩展。我尝试了各种指定其他变量的方法(例如 $(OTHER_VARIABLE)),但 MSBuild 始终可以看到该值。

有没有办法根据另一个变量来定义一个变量?

【问题讨论】:

  • 您使用的是哪个版本的 TFS?您使用的是 XAML 构建还是 vNext 构建?能否通过变量指定你想实现的功能?
  • 我们正在评估 TFS 2015。我们对 TFS 还很陌生,所以我不确定您所说的 XAML 构建或 vNext 构建是什么意思。现在,我们正在比较 TFS 与现有的 TeamCity 构建配置,其中我们定义了“构建模板”,其中包含构建的所有要求,包括环境变量,并且我们非常依赖能够根据以下方面定义变量其他变量 - 其他变量主要由 TeamCity 本身定义(例如代理工作目录)。
  • 我认为我们将能够通过将新目标添加到我们的 MSBuild 文件中来实现我们所需要的,首先设置环境(只有 TFS 构建需要使用这些),但我是好奇这是否可以在构建定义本身中实现。在前世(2010 年?)对 TFS 的早期版本进行了简单的试验后,在我看来,TFS 2015 构建配置实际上已经从 TeamCity 中汲取了一些概念(例如,各种“构建步骤”可以添加到构建定义中),但 TC 似乎仍然要复杂得多。
  • 嗯。新目标对我们不起作用,因为我们的构建使用 任务调用其他构建项目,并且在外部任务中设置的环境变量不会流向内部任务。烦恼。

标签: tfs msbuild environment-variables build-process


【解决方案1】:

如果你使用的是 TFS 2015,你可以使用这个扩展:

https://marketplace.visualstudio.com/items?itemName=jessehouwing.jessehouwing-vsts-variable-tasks

https://github.com/jessehouwing/vsts-variable-tasks/wiki/Expand-Variable

When you define a variable in the Variables screen and use other variables as value, they won't be expanded (as you may have expected). Instead the literal text is passed to the tasks in the workflow. Without this little task the following configuration won't work:

Variable    Value
Build.DropLocation  \\share\drops\$(Build.DefinitionName)\$(Build.BuildNumber)

By adding the Expand variable(s) task to the top of your workflow, it will take care of the expansion, so any task below it will receive the value you're after.

【讨论】:

  • 我希望有一种方法可以在 TFS 中本地执行此操作,但我想现在就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2021-12-27
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多