2012-08-01 19 views
6

En mi solución, algunos proyectos tienen tareas que deben ejecutarse al final, como copiar archivos en varios lugares. Implementamos eso con AfterTargets="Build":Las fallas de AfterTargets no fallan ejecución de msbuild

<Target Name="CopyStuff" AfterTargets="Build"> 
    <Copy SourceFiles="..." DestinationFolder="..." /> 
</Target> 

Si funciona. Sin embargo, cuando la construcción de la solución (! No el proyecto individual), si la copia falla, se obtiene una advertencia acumulación rojo, pero msbuild (y por lo tanto TFS construcción) tiene éxito:

> msbuild /t:clean;build my.sln 
(...) 
(in red...) error MSB3021: Unable to copy file (...) 

> echo %errorlevel% 
0  <<<<<<< This means succeeded 

A mi entender, eso es porque msbuild piensa que mientras el objetivo principal de "Construcción" haya pasado, todo pasó también.

Nuestra solución - Cambie el objetivo a BeforeTargets="AfterBuild", que coloca mi objetivo dentro del objetivo de compilación. Sin embargo, esto requiere conocimiento del contenido del objetivo "Compilar", y puede no funcionar para otros tipos de proyectos.

Pregunta:

  1. ¿Hay una manera de conseguir AfterTargets="Build" fracasos fallen solución se basa?
  2. Si no, ¿hay alguna manera de validar automáticamente que las personas no agregaron AfterTargets="Build" en sus proyectos?

Respuesta

0

Ha intentado añadir un < error/> después de la < Copia/> tarea a un error si el contenido de la fuente y destino no son lo mismo?

Cuestiones relacionadas