Pregunta MSBuild: Copie los archivos (si cambian) y luego realice una acción (solo si los archivos se actualizaron)


En MSBuild puedo usar el Copy tarea para copiar archivos de una ubicación a otra.

También puedo usar el SkipUnchangedFiles propiedad para especificar que los archivos no deben copiarse si no han cambiado.

¿Existe un patrón estándar para predicar una acción de seguimiento con la condición de que se copiaron uno o más archivos?

Por ejemplo:

  1. Copie cualquier script de implementación actualizado
  2. Ejecute el archivo por lotes que ejecuta todos los scripts de implementación, en el orden correcto, si y solo si uno o más de los scripts han cambiado

Una complicación adicional es que estoy usando el CreateItem tarea para generar dinámicamente la lista de archivos de entrada:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CopyAndRun">
  <Target Name="CopyAndRun">
    <CreateItem Include="In\**\*Test*.txt">
      <Output TaskParameter="Include" ItemName="SourceFiles"/>
    </CreateItem>
    <Copy SourceFiles="%(SourceFiles.Identity)" DestinationFolder="Out\%(RecursiveDir)" SkipUnchangedFiles="true" />
    <!-- Only want to execute this if updated files were copied -->
    <Message Text="Running..." />
  </Target>
</Project>

5
2018-05-14 16:16


origen


Respuestas:


Puedes lograr esto con edificio incremental que se proporciona fuera de la caja con MSBuild.

Sayed Ibrahim Hashimi

Mi libro: Dentro del motor de compilación de Microsoft: utilizando MSBuild y Team Foundation Build


9
2018-05-14 18:06