2011-07-27 11 views
6

Estoy tratando de mejorar los tiempos de construcción usando CruiseControl.NET y MSBUILD, y uno de los switches de línea de comando, maxcpucount se puede usar para permitir que la compilación se realice en paralelo. Nuestra solución tiene más de 60 proyectos por lo que cualquier mejora sería útil. Sin embargo, cada vez que el maxcpucount encima de uno, tenemos fallas de construcción frecuentes debido a:MSBUILD falla con "El proceso no puede acceder al archivo xxxxx porque lo está utilizando otro proceso". cuando maxcpucount es mayor que 1

"El proceso no puede acceder al xxxx archivo porque está siendo utilizado por otro proceso MSBUILD"

Parece que los procesos/subprocesos de compilación paralelos adicionales se bloquean entre sí.

Respuesta

2

¿Está construyendo a partir de un archivo de solución? Si es así, asegúrese de estar utilizando referencias directas de proyecto a proyecto y no utilice la función de dependencia de proyecto de la Solución. Si usa un poco de ambos, puede haber problemas. Ver this article.

Mejor aún, si es posible, abandone el archivo de solución y cree su propio archivo MSBuild para dirigir su compilación.

+1

sí, estoy construyendo un archivo de solución con todas las referencias del proyecto. – JNappi

0

Su ensamblaje probablemente esté siendo utilizado por otro ensamblaje que se está construyendo. Asegúrese de que cada conjunto se construya antes de que lo necesiten otros ensambles

3

Creo que encontré una solución. Parece que si agrego el modificador/nodeReuse: false, no obtengo los bloqueos de archivos. Parece que la funcionalidad nodeReuse está manteniendo los procesos de msbuild y estos están pendientes de bloqueos de archivos para las compilaciones posteriores.

http://msdn.microsoft.com/en-us/library/ms164311.aspx

+0

Esto realmente no funcionó. Parecía bueno para algunas compilaciones, pero finalmente me limité a compilaciones rotas debido a que el dll estaba bloqueado. – JNappi

+0

¿Estás seguro de que es msbuild quien está bloqueando el archivo? ¿Puedes confirmarlo a través de Process Explorer o una utilidad similar? – Mrchief

Cuestiones relacionadas