Как мне найти текущий файл в MSBuild - PullRequest
4 голосов
/ 30 мая 2009

Я знаю, что в последней книге о MSBuild говорится, что это невозможно, но я уверен, что видел свойство, которое указывает на текущий файл.

Кто-нибудь знает способ найти текущий файл? (т.е. когда основной файл MSBuild импортирует вторичный файл. Каков путь к вторичному файлу внутри этого файла.)

Я пытаюсь зарегистрировать свой файл в HKEY_LOCALMACHINE \ Software \ Microsoft \ VisualStudio \ 8.0 \ MSBuild \ SafeImports, но путь к файлу не является постоянным на каждом из моих коллег, и он импортируется из нескольких разных проектов. жестко закодированный относительный путь также не является хорошей идеей.

Если есть способ получить текущий рабочий каталог, который тоже будет работать (рабочий каталог переключается при каждом импорте, и я думаю, что я могу сохранить его)

Ответы [ 2 ]

4 голосов
/ 01 июня 2009

Не существует надежного средства для идентификации " текущего файла ". Когда MSBuild обрабатывает файл, он может импортировать несколько других файлов, конечным результатом является полное представление файла в памяти. Когда цели выполняются, они не знают, в каком файле они были объявлены.

Вот почему повторно используемые сценарии сборки должны быть «параметризованы», чтобы принять местоположение в известных относительных местоположениях. Например, если у вас есть зависимость от местоположения, в котором находится ваша папка для сторонних ссылок, сценарий сборки, который управляет процессом, должен объявить это свойство для вас.

MSBuild 4.0 Only

Если вы используете MSBuild 4.0 , то есть Visual Studio 2010 / .NET 4.0 (которая может быть нацелена на .NET 2.0 / 3.0 / 3.5) Теперь у вас есть эти свойства, которые можно использовать для этой конкретной цели:

  • MSBuildThisFile
  • MSBuildThisFileDirectory
  • MSBuildThisFileDirectoryNoRoot

сказал Ибрагим Хашими

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

1 голос
/ 18 июля 2011

В 4.0+ вы можете использовать такие свойства, как $ (MSBuildThisFile), чтобы сделать именно это. Смотри здесь

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