Как я могу сослаться на путь к рабочей области из msbuild в сборке команды?
У меня есть куча устаревших файлов проекта, которые используют переменную $(ProjectRoot) во включаемых путях для ссылки на корень дерева исходного кода. Мы определяем переменную в нашей среде Visual Studio, чтобы сборки рабочего стола могли найти свой путь в используемое рабочее пространство TFS.
Я хотел бы определить эту переменную в среде Team Build с помощью параметра командной строки MSBuild в моем определении сборки tfs, но я не могу найти способ, который работает. Я нашел ответ ( Список свойств msbuild, которые TFS передает в скрипт сборки) со списком переменных, и SolutionRoot выглядел многообещающим.
Когда я положил /p:ProjectRoot=$(SolutionRoot)
в MSBuild Arguments
для моего определения сборки ProjectRoot заканчивается пустым. Я хочу, чтобы это расширилось до чего-то вроде D:\Builds\18\TfsProject\BuildDef\src\
Есть ли способ определить мою переменную со значением корня из источников рабочей области в Team Build?
Примечание. Я попытался выяснить это в TFS2010 и, наконец, отказался и изменил BuildProcessTemplate, чтобы определить переменную, используя переменную SourcesDirectory, которая доступна внутри этого контекста. Я думал, что предприму еще одну попытку, надеясь использовать новый шаблон в TFS2013 без изменений, но я все еще в замешательстве.
ОБНОВЛЕНИЕ: Оказывается, синтаксис, который я имел в моих аргументах MSBuild, сработал бы, если бы переменная, на которую я разыменовался, фактически передавалась в msbuild. Список из другого поста, на который я ссылаюсь, кажется, больше не действителен. Если посмотреть подробные журналы Team Build, похоже, что единственными переменными, передаваемыми в msbuild в Team Build, являются OutDir, BuildId, BuildLabel, BuildTimestamp, BuildSourceVersion и BuildDefinition. Ни один из них не дает мне информации, которая нужна моим текущим сценариям msbuild во время сборки, поэтому я застрял либо переделывая все наши файлы проекта, либо продолжая модификации BuildProcessTemplate, которые я использовал. Если кто-то не придет с лучшим ответом здесь.
2 ответа
Вы должны быть в состоянии указать /p:ProjectRoot=$(TF_BUILD_SOURCESDIRECTORY)
в аргументах MSBuild вашего определения сборки при использовании TFS2013.
См. Документацию по переменным среды Team Foundation Build для получения дополнительной информации.
Установите свойство, используя другое свойство. Используйте условие, чтобы установить его, только если оно пустое.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="xxxxxxxxxxxx">
<PropertyGroup>
<ProjectRoot Condition="$(ProjectRoot)==''"/>$(SolutionRoot)</ProjectRoot>
</PropertyGroup>