Los objetivos personalizados se omiten después de la primera ejecución en la compilación TFS

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

Pregunta

Tengo un objetivo personalizado (un grupo de tareas de copia, entre otros) en mi compilación que necesito llamar un par de veces para efectuar cambios en diferentes lugares. Sin embargo, esto solo se ejecuta la primera vez que se llama, después de lo cual la compilación TFS omite dicho objetivo.

El proceso es el siguiente:

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

...

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

En el registro de compilación, se ve que el objetivo '' Copiar archivos '' se omite la segunda vez que se llama:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

¿Por qué está pasando esto? ¿Hay alguna manera de forzar que el objetivo (o cualquier objetivo personalizado que escriba) se ejecute varias veces?

¿Fue útil?

Solución

Debe llamarse una vez por instancia de MSBuild, por conjunto de parámetros. Team Build produce instancias separadas de MSBuild en algunas circunstancias (por ejemplo, si proporciona más de una configuración de solución). Pero eso probablemente no te ayude.

Más aplicable a su escenario, MSBuild volverá a ejecutar una tarea si la llama con un conjunto diferente de parámetros. Si está copiando dos conjuntos diferentes de archivos que suenan como la función que está buscando.

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

La otra solución es refactorizar la funcionalidad en una Tarea en lugar de un Destino. Si bien todavía hay peculiaridades declarativas versus procesales, las tareas se comportan mucho más cerca de lo que usted considera como una "función". de idiomas más familiares.

Otros consejos

Esto es por diseño. Los objetivos no deben considerarse como "métodos". MSBuild es más declarativo. Por lo tanto, realiza un seguimiento de los objetivos que se han ejecutado y omite a propósito aquellos que ya se han completado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top