Пользовательские цели пропускаются после первого запуска в сборке TFS - PullRequest
2 голосов
/ 12 сентября 2009

У меня есть пользовательская цель (группа задач копирования, среди прочих) в моей сборке, которую мне нужно пару раз вызывать для изменения в разных местах. Однако он запускается только при первом вызове, после чего сборка 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.

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

Ответы [ 2 ]

4 голосов
/ 12 сентября 2009

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

3 голосов
/ 13 сентября 2009

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

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

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

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

...