MSBuild SvnInfo - какие целевые входы являются правильными? - PullRequest
1 голос
/ 16 августа 2011

Я использую Задача SvnInfo в скрипте MSBuild:

<SvnInfo LocalPath="$(Sources)">
  <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnInfo>

$(Sources) содержит только исходные файлы.

Очевидно, SvnInfo зависит от файлов в $(Sources). Затем целевой объект использует информацию для создания выходного файла с номером редакции.

На самом деле я хочу запускать SvnInfo при изменении номера редакции, но не запускать Target (использовать инкрементную сборку), когда номер редакции совпадает с предыдущим.

Как правильно указать ввод в target (атрибут Inputs в теге Target, который содержит вызов задачи SvnInfo)?

Я сделал это следующим образом:

<ItemGroup>
  <Target1Inputs Include="$(Sources)\**" />
</ItemGroup>

<Target Name="Target1" Inputs="@(Target1Inputs)" Outputs="...">
  ...
  <!-- SvnInfo call here -->
  <!-- File with revision number is created here -->

</Target>

Мне кажется, что это обходной путь, потому что в идеале я должен знать, от каких файлов SvnInfo зависит, не догадываясь. Можно ли получить такую ​​информацию?

Я также не знаю, изменены ли папки .svn или нет.

1 Ответ

0 голосов
/ 16 августа 2011

В основном таким образом:

<PropertyGroup>
  <ExcludePdbs>$(YourOutputPath)\**\*.pdb</ExcludePdbs>
  <ExcludeTmp>$(YourOutputPath)\**\*tmp*</ExcludeTmp>
</PropertyGroup>

<!-- Prepare set of files -->
<ItemGroup>
   <Files Include="$(FilesToIncludeFolder)\**\*.*"
          Exclude="$(ExcludePdbs);$(ExcludeTmp);$(ExcludeOtherFiles);"/>
</ItemGroup>

<!-- Pass into the target -->
<Target Name="Target1" Inputs="@(Files)" Outputs="..." />

РЕДАКТИРОВАТЬ: Вопрос был обновлен, так что вот мое обновление также

Предположим, что вы можете обработать измененное состояние ревизии, вы можете добавить Condition к Target и запустить его в зависимости от свойства $(RevisionWasChanged).

<Target Condition="$(RevisionWasChanged)=='True'"` />

Также для управления потоком выполнения сценария сборки вы можете использовать функцию <Choose>:

<Choose>
    <When Condition="$(RevisionWasChanged)=='True'">
    </When>
    <Otherwise>
    </Otherwise>
</Choose>

Дайте мне знать, работает ли он для вас.

...