Как интегрировать условную логику в события пост-сборки - PullRequest
1 голос
/ 23 марта 2010

Привет, у меня есть визуальный студийный проект, который включает postbuildevents в следующей форме:

MyTool.exe $ (ProjectDir) somesrcfile.txt $ (TargetDir) sometargetfile.bin

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

if (somesrcfile.txt новее sometargetfile.bin) { MyTool.exe $ (ProjectDir) somesrcfile.txt $ (TargetDir) sometargetfile.bin }

Могу ли я сделать это с помощью MsBuild?

EDIT: Я только попробовал это с простой командой копирования, но это, кажется, не работает. Также сообщение не отображается, когда я строю решение.

<ItemGroup>
    <MyTextFile Include="*.txt" />
  </ItemGroup>

  <Target Name="Build" Inputs="@(MyTextFile)" Outputs="@(MyTextFile->'%(Filename).bin')">
      <CustomBuild>
        <Message>Encoding files...</Message>
        <Command>
            copy %(Identity) %(Filename).bin
        </Command>
        <Outputs>$(OutDir)%(Identity)</Outputs>
      </CustomBuild>
  </Target>

1 Ответ

4 голосов
/ 23 марта 2010

Да, это возможно при использовании атрибутов Inputs и Outputs на вашей цели.

См .: Как: Построить пошагово

В вашем случае это будет выглядеть примерно так:

  <Target Name="AfterBuild" DependsOnTargets="Test">
  </Target>

  <ItemGroup>
    <MyTextFile Include="*.txt" />
  </ItemGroup>

  <Target Name="Test" Inputs="@(MyTextFile)" Outputs="@(MyTextFile->'%(FileName).bin')">
    <Message Text="Copying @(MyTextFile)" Importance="high"/>

    <Copy SourceFiles="@(MyTextFile)"  DestinationFiles="@(MyTextFile->'%(FileName).bin')" />

  </Target>

Эта цель будет выполняться толькоесли входные файлы новее, чем выходные.

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