msbuild.exe permanece abierto, bloqueando archivos
teamcity (2)
Para deshabilitar la reutilización de nodos en Visual Studio, debe usar una variable de entorno:
MSBUILDDISABLENODEREUSE=1
Uso TeamCity, que a su vez invoca msbuild (.NET 4). Tengo un problema extraño cuando termina una compilación (y no parece importar si fue una compilación exitosa o no), msbuild.exe permanece abierto y bloquea uno de los archivos, lo que significa que cada vez que TeamCity intenta para borrar su directorio de trabajo, falla y no puede continuar.
Esto sucede casi todo el tiempo.
Estoy realmente perdido en este, así que trataré de proporcionar tantos detalles como sea posible.
- El servidor es un Intel Core i7, 2 GB RAM, con Windows Server 2008 estándar de 64 bits SP2.
- En TeamCity, el corredor de msbuild está configurado con el parámetro de línea de comandos
/m
(lo que significa usar múltiples núcleos) - El archivo en cuestión SIEMPRE es el mismo DLL externo al que se hace referencia en uno de los proyectos .NET, en la ruta
External Tools/Telerik/Telerik.Reporting.Dll
. (Hay varios otros archivos .DLL incluidos en el directorioExternal Tools
en una estructura de ruta similar que nunca causa este problema). Actualmente esto es con la versión de prueba de los informes de Telerik, en caso de que haya alguna diferencia. - Cuando ocurre un problema, siempre hay varios procesos
msbuild.exe *32
listados en el Administrador de tareas: creo que hay 7. Al usar Process Explorer, todos parecen procesos de nivel superior (sin padres). Todos están usando de 20-50MB de RAM, y 0.0% de CPU. - Si espero de 1 a 3 minutos, los procesos msbuild.exe salen por sí mismos, y TeamCity puede actualizar el directorio de trabajo correctamente.
- Si finalizo manualmente los procesos de msbuild, la actualización de TeamCity funcionará de nuevo inmediatamente.
- Los servicios de indexación están desactivados en Windows (aunque los dos puntos anteriores prácticamente confirman que es msbuild.exe el que causa el problema).
- No hay propiedades especiales en Telerik.reporting.dll. La única propiedad de SVN es
svn:mime-type = application/octet-stream
Alguien ha encontrado esto antes?
Use msbuild
con /nr:false
.
En pocas palabras: MSBuild intenta hacer muchas cosas para ser rápido, especialmente con compilaciones paralelas. Generará muchos "nodos": procesos individuales de msbuild.exe que pueden compilar proyectos, y dado que los procesos tardan un poco en dar un giro, después de que se complete la compilación, estos procesos se mantienen (de forma predeterminada, durante 15 minutos, creo ), de modo que si vuelve a construir pronto, estos nodos se pueden "reutilizar" y ahorrar el costo de configuración del proceso. Pero puede desactivar ese comportamiento desactivando nodeReuse con la opción de línea de comando mencionada anteriormente.
Ver también: