Задача MSBuild для выполнения внешнего файла MSBuild - PullRequest
9 голосов
/ 01 октября 2009

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

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

Я знаю, что могу просто использовать задачу <Exec Command="msbuild.exe ..." />, но это похоже на хакерский способ сделать это.

Есть ли более простой способ использовать MSBuild для запуска другого файла MSBuild?

Ответы [ 4 ]

13 голосов
/ 01 октября 2009

Вы можете использовать MSBuild task для создания цели в другом проекте MSBuild.

Вы также можете поместить цель во внешний файл .targets, который импортируется обоими проектами MSBuild, и использовать CallTarget task для его создания.

Обновление: для выполнения внешней команды используйте Exec task.

7 голосов
/ 16 мая 2010

Не просто красивее использовать задачу <MSBuild>, чем <Exec Command="msbuild.exe .."/>. Это означает, что один процесс MSBuild знает обо всех создаваемых проектах, и нет коллизий; конкретный проект не может быть построен двумя потоками одновременно. Это обычно жизненно важно, если вы строите с "/ m". Есть и другие преимущества, например, наличие одного набора регистраторов для всей сборки.

2 голосов
/ 16 апреля 2010

Ответ на комментарий Адама Орен: Вот пример выполнения внешнего файла - в этом случае он запускает nunit. % 22 предназначен для экранирования, это означает, что «вы можете иметь пробелы в вашем пути к исполняемому файлу.

<Exec Command="%22$(NUnit_Install_Directory)bin\net-2.0\nunit-console.exe%22 
/noshadow @(TestableAssemblies, ' ') /xml 
 $(BuildFilesPath)\NCover-NUnit-Results.xml" /> 

Вам не нужно использовать переменные, как я, но я считаю, что это делает ваши сценарии более переносимыми. $ (NUnit_Install_Directory) определяется как

<PropertyGroup> 
   <NUnit_Install_Directory>c:\Program Files\NUnit 2.5.3\</NUnit_Install_Directory> 

0 голосов
/ 19 декабря 2010
<Target Name="TA">
    <CallTarget Targets="TB"/>
</Target>

<Target Name="TB">
    <Message Text="TB..." />
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...