Tenemos una solución de Visual Studio bastante compleja (57 proyectos, 19 de los cuales son sitios web que no se compilan casi siempre cuando se activa presionando código, pero luego activamos manualmente la compilación y en el reintento, se compila muy bien.La creación de sitios web de Visual Studio falla intermitentemente en el servidor de CI
La solución contiene 57 proyectos, 19 de los cuales son proyectos de sitio web. (No proyectos de aplicaciones web, no hay archivo .csproj). El resto son bibliotecas de clases y trabajos en segundo plano. los proyectos del sitio web están estructurados en directorios virtuales de IIS en un gran sistema de administración de contenido multifuncional.
El servidor de compilación es Hudson v1.395. El comando utilizado para compilar es:
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" "SolutionName.sln" /rebuild Debug
Cuando la generación falla, lo hace siempre en el mismo proyecto exacta sitio web, con exactamente el mismo mensaje:
------ Rebuild All started: Project: C:\...\WebsiteName\, Configuration: Debug Any CPU ------
Validating Web Site
: Build (web): The application domain in which the thread was running has been unloaded.
Validation Complete
Un Google Search for this message es actualmente menos de ayudar. This link se acerca más al problema real pero no tiene resolución. Obviamente, no estamos cambiando ningún archivo de solución durante la compilación porque está ocurriendo en el servidor de compilación.
Cuando falla, que desencadenan la acumulación de forma manual, y obtenemos como esperamos (lo siento, redactada):
------ Rebuild All started: Project: C:\...\News2\, Configuration: Debug Any CPU ------
Validating Web Site
Building directory '/WebsiteName/Dir1/Dir2/'.
Building directory '/WebsiteName/'.
Building directory '/WebsiteName/Dir3/'.
// 22 more but you get the point
// A few warnings caused by our own use of the ObsoleteAttribute, nothing to be concerned about
Validation Complete
Lo que podría causar este dominio de aplicación descargado mensaje?
Algunas otras notas:
- pensamos que podría ser Hudson funcionamiento de la memoria, porque nosotros observamos java fugas que un poco. Entonces, agregamos una tarea para reiniciar el servicio Hudson cada mañana a las 6 a. M. Incluso con esto y una buena cantidad de memoria disponible listo para funcionar durante la compilación, aún falló.
- Una inserción en el mismo repositorio también provoca la creación de una solución mucho más simple (solo 22 proyectos, sin proyectos de sitios web) al mismo tiempo. Ese siempre tiene exito. Además, se activan manualmente para que ambos se ejecuten al mismo tiempo.
- Sé que debemos actualizar Hudson, pero ese es siempre uno de esos proyectos de backburner que nunca parece tener tiempo para. En cualquier caso, creo firmemente que se trata de un problema de Visual Studio/MSBuild, no de un problema de Hudson.
Edición 1: MSBuild
El problema con MSBuild es que hay tantos pequeños caprichos que difieren de una acumulación en Visual Studio. Es extremadamente frustrante para una solución compilar en Visual Studio en una máquina de desarrollo y luego fallar en el servidor de compilación. Incluso el resultado de msbuild es drásticamente diferente (mucho más detallado por una parte) de lo que nuestros desarrolladores ven en su ventana de generación de resultados. ¿Hay indicadores de línea de comando adicionales que hagan que la salida de MSBuild esté más en línea con lo que obtienes en la ventana de compilación de Visual Studio?
También hay otras cosas que son incómodas. Si tiene una carpeta de solución con el mismo nombre que un proyecto, MSBuild arroja un error, pero Visual Studio lo soluciona perfectamente. Esas son las peculiaridades que realmente te hacen arrancarte el pelo.
En cuanto a MSBuild, consulte "Editar 1" que adjunté a mi pregunta. Si bien no es mi opción favorita, lo intentaré. Voy a probar/RunExit también, aunque no observamos casos devenidos en el servidor. También una aclaración: a pesar de que son * del * mismo repositorio, ambas soluciones son clones completos por lo que no hay intercambio de ningún tipo entre las dos instancias devenv simultáneas. –
con respecto a los niveles de registro en MSBuild, puede cambiarlo usando el indicador/verbosity [enlace de MSDN] (http://msdn.microsoft.com/en-us/library/ms164311.aspx) –
** Esta opción no está disponible para Visual Studio 7.0-9.0 (2003-2008) y proyectos C++! ** (VS 10.0 convierte proyectos C++ a msbuild, por lo que es posible allí). –