Pergunta

Eu tenho um alvo personalizado (um grupo de tarefas de cópia, entre outros) na minha compilação que eu preciso chamar um par de vezes para efetuar mudanças em lugares diferentes. No entanto, isso só funciona na primeira vez que é chamado, após o qual TFS construir ignora o dito alvo.

O processo é o seguinte:

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

...

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

No log de compilação, é visto que os "CopyFiles" alvo é ignorada pela segunda vez é chamado:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

Por que isso está acontecendo? Existe uma maneira de forçar o alvo (ou qualquer gravação alvo costume I) para executar várias vezes?

Foi útil?

Solução

Ele deve ser chamado uma vez por instância MSBuild, por conjunto de parâmetros. Criar Equipe faz spin off instâncias separadas do MSBuild em algumas circunstâncias (por exemplo, se você fornecer mais de uma configuração solução). Mas isso provavelmente não ajudá-lo.

Mais aplicável ao seu cenário, MSBuild vai voltar a executar uma tarefa, se você chamá-lo com um conjunto diferente de parâmetros. Se você está copiando dois conjuntos diferentes de arquivos que soa como o recurso que você está procurando.

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

A outra solução é refatorar a funcionalidade em uma tarefa em vez de um alvo. Embora ainda haja declarativa vs peculiaridades processuais, Tarefas se comportam muito mais perto do que você pensa como uma "função" de línguas mais familiares.

Outras dicas

Isso ocorre por design. Metas não deve ser pensado como "métodos". MSBuild é mais declarativo. Então, ele mantém o controle das metas que foram executadas e propositadamente ignora aqueles que já foram concluídos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top