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

StackOverflow https://stackoverflow.com/questions/1413698

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top