Uso de varios procesadores para compilar proyectos
MSBuild puede aprovechar las ventajas de los sistemas que tienen varios procesadores o varios núcleos. Se crea un proceso de compilación independiente para cada procesador disponible. Por ejemplo, si el sistema tiene cuatro procesadores, se crean cuatro procesos de compilación. MSBuild puede procesar estas compilaciones simultáneamente y, por tanto, el tiempo de compilación se reduce. Sin embargo, la compilación en paralelo presenta algunos cambios en la forma en la que tienen lugar los procesos de compilación. En este tema se analizan estos cambios.
Referencias entre proyectos
Cuando Microsoft Build Engine encuentra una referencia entre proyectos (P2P) mientras está utilizando compilaciones en paralelo para compilar un proyecto, solo compila la referencia una vez. Si dos proyectos tienen la misma referencia entre proyectos, la referencia no se recompila para cada proyecto. En su lugar, el motor de compilación devuelve la misma referencia entre proyectos a los dos proyectos que dependen de él. En la misma referencia entre proyectos se proporcionan las solicitudes futuras para el mismo destino en la sesión.
Detección de ciclos
La detección de ciclos funciona igual que en MSBuild 2.0, solo que ahora MSBuild puede notificar la detección del ciclo en un momento diferente o en la compilación.
Errores y excepciones durante las compilaciones en paralelo
En las compilaciones en paralelo, los errores y excepciones pueden producirse en momentos diferentes que en una compilación no paralela, y cuando un proyecto no se compila, las demás compilaciones de proyectos continúan. Si se producen errores en un proyecto, MSBuild no detendrá la compilación de proyectos que se está ejecutando en paralelo. Los demás proyectos seguirán compilándose hasta que terminen correctamente o con errores. Sin embargo, si se ha habilitado ContinueOnError, no se detendrá ninguna compilación aunque se produzca un error.
Archivos de proyecto (.vcxproj) y solución (.sln) de C++
Los archivos de proyecto ( .vcxproj) y los archivos de solución ( .sln) de C++ se pueden pasar a la tarea de MSBuild. Para los proyectos de C++, se llama a VCWrapperProject y, a continuación, se crea el proyecto de MSBuild interno. Para las soluciones de C++, se crea un elemento SolutionWrapperProject y, a continuación, se crea el proyecto de MSBuild interno. En ambos casos, el proyecto resultante se trata igual que cualquier otro proyecto de MSBuild.
Ejecución con varios procesos
Casi todas las actividades relacionadas con la compilación requieren que el directorio actual permanezca constante a lo largo del proceso de compilación para evitar errores relacionados con la ruta de acceso. Por consiguiente, los proyectos no se pueden ejecutar en subprocesos diferentes de MSBuild porque haría que se crearan varios directorios.
Para evitar este problema pero seguir habilitando compilaciones de varios procesadores, MSBuild usa "aislamiento de procesos". Mediante esta opción, MSBuild puede crear un máximo de procesos n
, donde n
es igual al número de procesadores disponibles en el sistema. Por ejemplo, si MSBuild compila una solución en un sistema que tiene dos procesadores de impresión, solo se crean dos procesos de compilación. Estos procesos se reutilizan para compilar todos los proyectos de la solución.