Пользовательские цели пропускаются после первого запуска в сборке TFS

У меня есть пользовательская цель (среди прочего, группа задач копирования) в моей сборке, которую мне нужно вызвать пару раз, чтобы внести изменения в разных местах. Однако это запускается только при первом вызове, после чего сборка TFS пропускает указанную цель.

Процесс происходит следующим образом:

<!-- Copy some files to another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

...

<!-- Copy the above files to yet another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

В журнале сборки видно, что цель "CopyFiles" пропускается при втором вызове:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

Почему это происходит? Есть ли способ заставить цель (или любую пользовательскую цель, которую я пишу) запускать несколько раз?


person Jooeun Lee    schedule 11.09.2009    source источник


Ответы (2)


Его следует вызывать один раз для каждого экземпляра MSBuild для каждого набора параметров. В некоторых случаях Team Build выделяет отдельные экземпляры MSBuild (например, если вы предоставляете несколько конфигураций решения). Но это, вероятно, не поможет вам.

Более применимый к вашему сценарию, MSBuild повторно запустит задачу, если вы вызовете ее с другим набором параметров. Если вы копируете два разных набора файлов, это похоже на функцию, которую вы ищете.

<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=1" />
<!--  ....  -->
<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=2" />

Другое решение — преобразовать функциональность в Task вместо Target. Несмотря на то, что все еще существуют декларативные и процедурные причуды, Задачи ведут себя гораздо ближе к тому, что вы считаете «функцией» из более знакомых языков.

person Richard Berg    schedule 12.09.2009

Это по дизайну. Цели не следует рассматривать как «методы». MSBuild является более декларативным. Таким образом, он отслеживает цели, которые были выполнены, и целенаправленно пропускает те, которые уже выполнены.

person Sayed Ibrahim Hashimi    schedule 12.09.2009