Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
MSBuild puede aprovechar al máximo los sistemas que tienen varios procesadores o procesadores de varios núcleos mediante la creación de un proceso de compilación independiente para cada procesador. Por ejemplo, si un sistema tiene cuatro procesadores, MSBuild crea cuatro procesos de compilación.
MSBuild puede procesar varias compilaciones simultáneamente, lo que reduce el tiempo de compilación general. Sin embargo, las compilaciones paralelas pueden introducir cambios en la forma en que se producen los procesos de compilación.
En este artículo se describen los cambios de proceso que pueden producirse cuando varias compilaciones se ejecutan simultáneamente.
Referencias de proyecto a proyecto
Cuando microsoft Build Engine encuentra una referencia de proyecto (ProjectReference
elemento) durante las compilaciones paralelas de un proyecto, solo compila la referencia una vez. Si dos proyectos tienen la misma referencia de proyecto, la referencia no se vuelve a generar para cada proyecto. En su lugar, el motor de compilación devuelve la misma referencia de proyecto a ambos proyectos que tienen la dependencia. MSBuild también proporciona la misma referencia de proyecto a solicitudes futuras en la sesión para el mismo objetivo.
Detección de ciclos
La detección de ciclos durante las compilaciones paralelas es el mismo comportamiento que para MSBuild 2.0. La única diferencia es que la versión más reciente de MSBuild puede notificar la detección del ciclo en un momento diferente o en la compilación.
Errores y excepciones durante las compilaciones paralelas
Durante las compilaciones paralelas, los errores y las excepciones pueden producirse en momentos diferentes de los que hacen durante una compilación no paralela. Además, si un proyecto no se compila, las compilaciones de los otros proyectos continúan.
MSBuild no detiene la compilación de ningún proyecto en paralelo con una compilación con errores. Otros proyectos continúan desarrollándose hasta que tengan éxito o fracasen. Cuando la ContinueOnError configuración está habilitada, no se detiene ninguna compilación, incluso si se produce un error.
Archivos de proyecto de C++ (.vcxproj) y solución (.sln)
Tanto los archivos de proyecto de C++ (.vcxproj) como de la solución (.sln) se pueden pasar a la tarea de MSBuild.
- Proyectos de C++: se llama a la API VCWrapperProject y, a continuación, se crea el proyecto interno de MSBuild.
- Soluciones de C++: se crea una instancia solutionWrapperProject y, a continuación, se crea el proyecto interno de MSBuild.
En ambos casos, el proyecto resultante se controla como cualquier otro proyecto de MSBuild.
Ejecución de varios procesos
Casi todas las actividades relacionadas con la compilación requieren que el directorio actual permanezca constante durante todo el proceso de compilación para evitar errores relacionados con la ruta de acceso. Los proyectos no se pueden ejecutar en subprocesos diferentes en MSBuild porque pueden provocar la creación de varios directorios.
Para evitar este problema, pero seguir habilitando compilaciones de varios procesadores, MSBuild usa el aislamiento de procesos. Este proceso ha habilitado MSBuild para crear un máximo de n
procesos, donde n
es igual al número de procesadores disponibles en el sistema. Por ejemplo, si MSBuild compila una solución en un sistema con dos procesadores, solo se crean dos procesos de compilación. Estos procesos se reutilizan para compilar todos los proyectos de la solución.