Domanda

Ho un target personalizzato (un gruppo di attività di copia, tra gli altri) nella mia build che devo chiamare un paio di volte per effettuare il cambiamento in luoghi diversi. Tuttavia, questo viene eseguito solo la prima volta che viene chiamato, dopodiché la build TFS salta tale destinazione.

Il processo procede come segue:

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

...

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

Nel registro di compilazione, si vede che il target "quotazioni di file" viene saltato la seconda volta che viene chiamato:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

Perché sta succedendo questo? C'è un modo per forzare l'esecuzione del target (o qualsiasi target personalizzato che scrivo) più volte?

È stato utile?

Soluzione

Dovrebbe essere chiamato una volta per istanza di MSBuild, per set di parametri. Team Build crea in alcuni casi istanze separate di MSBuild (ad es. Se si fornisce più di una configurazione di soluzione). Ma questo probabilmente non ti aiuta.

Più applicabile al tuo scenario, MSBuild eseguirà nuovamente un'attività se la chiami con un diverso set di parametri. Se stai copiando due diversi set di file che sembrano la funzionalità che stai cercando.

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

L'altra soluzione è quella di trasformare la funzionalità in un'attività anziché in una destinazione. Mentre ci sono ancora stranezze dichiarative vs procedurali, le Attività si comportano molto più vicino a ciò che pensi come una "funzione" da lingue più familiari.

Altri suggerimenti

Questo è di progettazione. Gli obiettivi non devono essere considerati come "metodi". MSBuild è più dichiarativo. Quindi tiene traccia degli obiettivi che sono stati eseguiti e salta intenzionalmente quelli che sono già stati completati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top