2011-12-08 7 views
8

Tengo una solución con varios proyectos de aplicaciones web. Después de que todos los proyectos hayan sido construidos, necesito ejecutar un script MSBUILD.VS 2010: Necesito proyecto para simplemente actuar como desencadenante de la secuencia de comandos MSBUILD y no compilar para ensamblar

Lo que solía hacer era llamar al script de uno de los proyectos existentes (a través del <Target Name="AfterBuild"> en el archivo .csproj). Sin embargo, tuve que asegurarme de que utilicé el proyecto que se construyó por última vez, y si el orden de compilación cambiara alguna vez, obtendría resultados inesperados.

Por lo tanto, decidí hacer un proyecto de aplicación web vacío y establecer las dependencias del proyecto para que siempre se construyera el último, luego adjuntar el script MSBUILD a esto.

Así que ahora siempre se ejecuta en el momento correcto, pero obtengo un ensamblaje extra (pequeño) como resultado del proyecto supuestamente vacío que se está construyendo. No hay archivos de código en el proyecto (excepto AssemblyInfo.cs), pero siempre se produce un ensamblaje.

Entonces, ¿hay alguna manera de detener el ensamblado que se está construyendo, o quizás una forma de adjuntar el script MSBUILD a la solución como un todo y evitar este proyecto falso por completo?

Respuesta

9

En MSBuild 4.0 hay dos nuevos ganchos que se pueden utilizar para ejecutar scripts antes y después de una solución se construye. Cuando se ejecuta MSBuild en un archivo de solución, que se verá por dos archivos en el directorio de destino solución:

  • antes. SolutionName .sln.targets
  • después de. SolutionName .sln.targets

Si se encuentra cualquiera de esos archivos, automáticamente se ejecuta en la etapa apropiada.

En su caso, con el fin de ejecutar una secuencia de comandos después se han construido todos los proyectos de la solución, se puede crear un archivo de after.MySolution.sln.targets con un Target como:

<Target Name="RunPostBuildScripts" AfterTargets="Build"> 
    <MSBuild Projects="PostBuild.targets" /> 
</Target> 

Ver también:

+0

Gracias Enrico. Buena respuesta y muy bien formateado también! – Laurence

3

no tengo suficientes puntos de reputación para comentar sobre la respuesta aceptada de Enrico, así que solo comentaré aquí que esto no funciona cuando ejecuta la compilación en Visual Studio 2010. Funciona cuando MSBuild se ejecuta como una línea de comandos.

Cuestiones relacionadas