TFS MSBuild: $ (ProjectDir) пусто или случайно - PullRequest
4 голосов
/ 12 июня 2009

У меня есть файл vcproj, который включает в себя простое событие перед сборкой в ​​следующем формате:

Helpertask.exe $(ProjectDir)

Это прекрасно работает на ПК разработчика, но когда решение построено на нашем сервере сборки TFS 2008 под MSBuild, $ (ProjectDir) либо пусто, либо указывает на несвязанную папку на сервере!

На данный момент лучший обходной путь, которым я управлял, - это жестко кодировать пути разработчика и сервера:

if exist C:\DeveloperCode\MyProject   HelperTask.exe C:\DeveloperCode\MyProject
if exist D:\BuildServerCode\MyProject HelperTask.exe D:\BuildServerCode\MyProject

Этот хак работает в шагах post -build, но не работает для шага pre -build (задача Pre-build теперь вообще ничего не делает под MSBuild!)

Есть ли у вас какие-либо идеи для исправления или обходного пути? У меня осталось очень мало волос!

Ответы [ 5 ]

8 голосов
/ 07 мая 2015

$ (MSBuildProjectDirectory) работал для меня

1 голос
/ 13 июня 2009

Я думаю, что ваша проблема может быть связана с тем, как предметы инициализируются. Атрибут include элементов оценивается в начале сборки. Поэтому, если вы зависите от файлов, созданных в процессе сборки, вы должны объявить их как динамические элементы. Динамические элементы - это те, которые определены внутри цели или с помощью задачи CreateItem. Я подробно изложил это в своем блоге MSBuild: Оценка товара и имущества .

Сайед Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

0 голосов
/ 17 июля 2012

Я разветвил существующий проект, а $ (ProjectDir) сохранил старый каталог во вновь разветвленном коде. Но это потому, что у меня были некоторые ошибки компиляции. После того, как каждый проект в решении скомпилирован без ошибок, $ (ProjectDir) изменился на правильный путь.

Карлос Мериге

0 голосов
/ 12 июня 2009

У меня просто возникали проблемы с этим - я пробовал много разных подходов, но все они загадочно провалились.

Как только $ (ProjectDir) снова начал работать правильно, шаг перед сборкой прекратил выполнение команды (я добавил эхо-команды над и под ней - они оба выполнялись, но программа между ними не была. Нет ошибок или выходных данных любого типа, чтобы указать, почему это не удалось).

Я не знаю, если это хитрый сервер, если MSBuild смеется.

Я сдался. Я дал большой толчок серверу сборки и изменил тактику: теперь мы запускаем этот инструмент в автономном режиме (вручную) и проверяем результаты для использования сервером сборки. Вот вам и автоматизированная сборка :-( Если бы только MSBuild запускал решения так же, как Visual Studio, - это сводит с ума, что он настраивает среду совершенно по-разному (разные пути, выходящие из переменных решения, выводятся в разные папки, поэтому вы не можете найти их там, где они должны быть, и т. д.)

0 голосов
/ 12 июня 2009

Мне кажется, проблема в том, что рабочая область сервера сборки, вероятно, не инициализирована должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...