MSBuild условный Exec? - PullRequest
       28

MSBuild условный Exec?

2 голосов
/ 18 октября 2010

Я строю различные проекты с использованием разметки

* 1003 например *

<Target Name="Name">
    <MSBuild Projects="" />
    <Exec Command="" />
</Target>

Я замечаю, что проект создается только по мере необходимости, и при запуске сценария сборки получается следующий вывод: «Пропуск цели« CoreCompile », поскольку все выходные файлы обновлены». Это замечательно, но как мне заставить мои команды

Обновление: Я реализовал предложение gregmac, но он все равно выполняет команду независимо. Вот что у меня сейчас:

<Target Name="Name">
<MSBuild Projects="">
    <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
<Exec Command="" Condition="'@(AssembliesBuiltByChildProjects)'!=''" />

Любая дополнительная помощь очень ценится. Это немного препятствует мне.

Спасибо за любые советы.

Alan

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

Вы должны использовать параметр TargetOutputs :

<MSBuild Projects="" >
   <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
<Message Text="Assemblies built: @(AssembliesBuiltByChildProjects)" /> <!-- just for debug -->
<Exec Command="" Condition="'@(AssembliesBuiltByChildProjects)'!=''" />
1 голос
/ 04 января 2018

Если вы можете добавить следующее к каждому из ваших проектов:

<Target Name="DoStuffWithNewlyCompiledAssembly">
    <Exec Command="" />
</Target>

... тогда вам нужно только добавить свойство:

<Target Name="Name">
  <MSBuild Projects="" Properties="TargetsTriggeredByCompilation=DoStuffWithNewlyCompiledAssembly" />
</Target>

Это работает, потому что кто-то умныйв Microsoft добавили следующую строку в конце цели CoreCompile в Microsoft.[CSharp|VisualBasic][.Core].targets (имя файла зависит от языка и версии MSBuild / Visual Studio).

<CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''"/>

Так что, если вы укажете цельимя в свойстве TargetsTriggeredByCompilation, ваша цель будет работать, если CoreCompile выполняется - и ваша цель не будет работать, если пропущена CoreCompile (например, потому что выходная сборка уже обновлена ​​по отношению к коду).

0 голосов
/ 28 ноября 2010

Мне удалось найти решение, отвечающее моим потребностям, хотя это может быть не оптимальным решением.

Смотрите мой ответ на другой мой вопрос здесь: MSBuild Post-Build

Спасибо, Alan

...