TFS 2015 Можно ли создавать переменные для доступа к другим переменным сборки?

Когда я определяю пользовательскую переменную в новой команде TFS 2015, выполните следующие действия:
Имя: SomeOutput
Значение: $(System.DefaultWorkingDirectory)\Some

... он не расширяет $(System.DefaultWorkingDirectory).
Есть ли способ обойти это?

РЕДАКТИРОВАТЬ:
По крайней мере, кажется, он не повсюду расширялся.

Например, в MSBuild-Arguments /p:OUTPUT="$(SomeOutput)" расширяется до /p:OUTPUT="C:\TfsData\BuildAgents\_work\3\s\Some" но когда я добавляю строку cmd построить задачу с помощью инструмента, установленного в cmd и установить параметр /k set, он печатает
SOMEOUTPUT=$(System.DefaultWorkingDirectory)\Some

EDIT 2: Вот мои переменные
variables

Это мой рабочий шаг
workflow

И это то, что печатает печать
build output

Ответы

Ответ 1

Вы можете использовать расширение VSTS Variable Tasks из Visual Studio Marketplace.

Когда вы определяете переменную на экране Variables и используете другие переменные в качестве значения, они не будут расширяться (как вы могли ожидать). Вместо этого буквальный текст передается задачам рабочего процесса. Без этой небольшой задачи следующая конфигурация не будет работать:

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

Добавив задачу Expand variable (s) в начало рабочего процесса, она позаботится о расширении, поэтому любая задача под ней получит значение, которое вам нужно.

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

PS: Новый агент (версия 2.x) автоматически расширяет переменные.

Ответ 2

Это может быть достигнуто.

Вам может потребоваться использовать % % вместо $ чтобы вызвать переменные в cmd для печати результата. Также необходимо добавить call в начале команды. Вот простой пример: cmd prompt expansion of variables example

Примечание: System.DefaultWorkingDirectory недоступен в cmd (не уверен, почему); вам нужно вместо этого использовать System_DefaultWorkingDirectory. Детали можно просмотреть в журналах.

Ответ 3

У меня была такая же проблема - хотелось собрать кусок пути, состоящего из нескольких встроенных переменных, и передать его сценарию PS.

Обход: Я в конечном итоге объединение переменных в фактическом сценарии через соответствующее сгенерированный переменное окружение (например $env:BUILD_SOURCESDIRECTORY).

Не то, что я имел в виду изначально, но он работает как минимум. Недостаток - если мне нужно изменить путь, мне всегда нужно изменить сценарий PS вместо переменной сборки.