msbuild.exe permanece abierto, bloqueando archivos


Utilizo TeamCity que a su vez invoca msbuild (. NET 4). Tengo un problema extraño en que después de que una compilación se complete (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 borrar su directorio de trabajo, falla y no puede continuar.

Esto sucede casi cada vez.

Estoy realmente perdido en este caso, así que voy a tratar de proporcionar tantos detalles como posible.

  • El servidor es un Intel Core i7, 2 GB de 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 es SIEMPRE la misma DLL externa a la 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 directorio External Tools en una estructura de ruta similar que nunca causa este problema). Actualmente esto es con la versión de prueba de Telerik reports, en caso de que haga alguna diferencia.
  • Cuando ocurre el problema, siempre hay varios procesos msbuild.exe *32 listados en el administrador de tareas: Creo que hay 7. Usando Process Explorer, todos parecen procesos de nivel superior (sin padres). Todos están usando desde 20-50MB ram, y 0.0% CPU.
  • Si espero 1-3 minutos, el msbuild.los procesos exe salen por su cuenta, y TeamCity puede actualizar el directorio de trabajo correctamente.
  • Si termino manualmente los procesos de msbuild, la actualización de TeamCity volverá a funcionar inmediatamente.
  • Los servicios de indexación están desactivados en Windows (aunque los dos puntos anteriores prácticamente confirman que es msbuild.exe causando el problema).
  • No hay propiedades especiales en Telerik.informar.DLL. La única propiedad SVN es svn:mime-type = application/octet-stream

¿Alguien se ha cruzado con esto antes?

Author: gregmac, 2010-10-13

2 answers

Use msbuild con /nr:false.

Brevemente: MSBuild intenta hacer muchas cosas para ser rápido, especialmente con compilaciones paralelas. Generará muchos "nodos" - msbuild individual.procesos exe que pueden compilar proyectos, y dado que los procesos toman un poco de tiempo para girar, después de que se realiza la compilación, estos procesos cuelgan alrededor (por defecto, durante 15 minutos, creo), de modo que si se vuelve a compilar pronto, estos nodos pueden ser "reutilizados" y ahorrar el costo de configuración del proceso. Pero puedes desactivar eso comportamiento desactivando nodeReuse con la opción de línea de comandos antes mencionada.

Véase también:

 112
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-25 12:45:16

Para deshabilitar la reutilización de nodos dentro de Visual Studio, debe usar una variable de entorno:

MSBUILDDISABLENODEREUSE=1
 37
Author: dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-23 17:51:20