Разница в файлах проекта Visual Studio между PostBuildEvent и целью AfterBuild? - PullRequest
29 голосов
/ 25 мая 2011

может кто-нибудь объяснить разницу между ними:

<Target Name="AfterBuild">
    <!-- task here -->
</Target>

и

<PropertyGroup>
<PostBuildEvent>copy "$(ProjectDir)\..\lib\$(PlatformName)\x.dll" .</PostBuildEvent>
</PropertyGroup>

Спасибо.

Ответы [ 2 ]

18 голосов
/ 25 мая 2011

Свойство PostBuildEvent может содержать команду, переданную в качестве атрибута Command для задачи Exec.По сути, вы в конечном итоге получаете цель, которая выглядит следующим образом:

<Target Name="PostBuildEvent">
   <Exec Command="$(PostBuildEvent)" />
</Target>

Вы можете настроить условия, когда это будет выполняться с параметром в IDE, по умолчанию он выполняется только при успешной сборке.

Цель AfterBuild может содержать произвольные задачи MSBuild, в том числе одну или несколько задач Exec или любую другую задачу, доступную для MSBuild, что повышает сложность.Цель PostBuildEvent запускается непосредственно перед «CoreBuild», а цель «AfterBuild» запускается после «CoreBuild».Если размещение имеет решающее значение, вы можете создать свою собственную цель и подключить ее к тому месту, где вам нужно ее запустить, используя объявления $ (DependsOn ..) или указав BeforeTargets и AfterTargets для новой цели.

18 голосов
/ 25 мая 2011

И PostBuildEvent, и AfterBuild являются целями MSBuild. Разница между ними заключается в условиях, когда они вызываются

  • AfterBuild: запускается как последнее действие в цели Build и независимо от того, успешна ли сборка. Он запускается после PostBuildEvent (если он вообще запускается)
  • PostBuildEvent: Это выполняется условно после завершения сборки. Когда он запускается, он настраивается, но в целом он будет работать только в том случае, если сборка успешно завершится и произведет новый вывод.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...