Utiliser plusieurs processeurs pour générer des projetsUse multiple processors to build projects

MSBuild permet d’exploiter des systèmes dotés de plusieurs processeurs ou de processeurs à plusieurs cœurs.MSBuild can take advantage of systems that have multiple processors, or multiple-core processors. Un processus de génération séparé est créé pour chaque processeur disponible.A separate build process is created for each available processor. Par exemple, si le système comporte quatre processeurs, quatre processus de génération sont créés.For example, if the system has four processors, then four build processes are created. MSBuildMSBuild peut traiter ces builds simultanément, et par conséquent la durée globale de génération est réduite. can process these builds simultaneously, and therefore overall build time is reduced. Toutefois, la génération parallèle introduit des modifications dans le déroulement du processus de génération.However, parallel building introduces some changes in how build processes occur. Cette rubrique aborde ces modifications.This topic discusses those changes.

Références entre projetsProject-to-project references

Si Microsoft Build EngineMicrosoft Build Engine rencontre une référence entre projets (P2P) durant l’exécution de builds parallèles pour générer un projet, il génère la référence une seule fois.When the Microsoft Build EngineMicrosoft Build Engine encounters a project-to-project (P2P) reference while it is using parallel builds to build a project, it builds the reference only one time. Si deux projets ont la même référence P2P, elle n’est pas régénérée pour chaque projet.If two projects have the same P2P reference, the reference is not rebuilt for each project. Au lieu de cela, le moteur de génération retourne la même référence P2P aux deux projets qui en dépendent.Instead, the build engine returns the same P2P reference to both projects that depend on it. La même référence P2P est fournie aux futures demandes de la session concernant la même cible.Future requests in the session for the same target are provided the same P2P reference.

Détection de cycleCycle detection

La détection de cycle fonctionne de la même manière que dans MSBuildMSBuild 2.0, mais MSBuildMSBuild peut désormais signaler la détection de cycle pendant la génération ou à un autre moment.Cycle detection functions the same as it did in MSBuildMSBuild 2.0, except that now MSBuildMSBuild can report the detection of the cycle at a different time or in the build.

Erreurs et exceptions pendant les générations parallèlesErrors and exceptions during parallel builds

Dans les builds parallèles, les erreurs et exceptions ne se produisent pas nécessairement aux mêmes moments que dans une build non parallèle, et quand la build d’un projet échoue, les autres builds de projet continuent.In parallel builds, errors and exceptions can occur at different times than they do in a non-parallel build, and when one project does not build, the other project builds continue. MSBuildMSBuild n’arrête aucune génération de projet qui s’exécute parallèlement à celle qui a échoué. will not stop any project build that is building in parallel with the one that failed. La génération d’autres projets continue jusqu’à ce qu’elles réussissent ou échouent.Other projects continue to build until they either succeed or fail. Toutefois, si ContinueOnError a été activé, aucune génération ne s’arrête, même si une erreur se produit.However, if ContinueOnError has been enabled, then no builds will stop even if an error occurs.

Fichiers projet (.vcproj) et solution (.sln) Visual C++Visual C++ project (.vcproj) and solution (.sln) files

Vous pouvez passer des fichiers projet Visual C++Visual C++ (.vcproj) et solution (.sln) à la tâche MSBuild.Both Visual C++Visual C++ projects (.vcproj) and solution (.sln) files can be passed to the MSBuild task. Pour les projets Visual C++Visual C++, VCWrapperProject est appelé, puis le projet MSBuildMSBuild interne est créé.For Visual C++Visual C++ projects, VCWrapperProject is called, and then the internal MSBuildMSBuild project is created. Pour les solutions Visual C++Visual C++, un SolutionWrapperProject est créé, puis le projet MSBuildMSBuild interne.For Visual C++Visual C++ solutions, a SolutionWrapperProject is created, and then the internal MSBuildMSBuild project is created. Dans les deux cas, le projet résultant est traité comme tout autre projet MSBuildMSBuild.In both cases, the resulting project is treated the same as any other MSBuildMSBuild project.

Exécution de plusieurs processusMulti-process execution

Presque toutes les activités liées à la génération nécessitent un répertoire constant durant le processus de génération pour éviter les erreurs liées aux chemins.Almost all build-related activities require the current directory to remain constant throughout the build process to prevent path-related errors. Les projets ne peuvent donc pas s’exécuter sur des threads différents dans MSBuildMSBuild car ils provoqueraient la création de plusieurs répertoires.Therefore, projects cannot run on different threads in MSBuildMSBuild because they would cause multiple directories to be created.

Pour éviter ce problème tout en autorisant la génération multiprocesseur, MSBuildMSBuild utilise « l’isolation des processus ».To avoid this problem but still enable multi-processor builds, MSBuildMSBuild uses "process isolation." Grâce à l’isolation des processus, MSBuildMSBuild peut créer au maximum n processus, où n représente le nombre de processeurs disponibles sur le système.By using process isolation, MSBuildMSBuild can create a maximum of n processes, where n equals the number of processors available on the system. Par exemple, si MSBuildMSBuild génère une solution sur un système à deux processeurs, seuls deux processus de génération sont créés.For example, if MSBuildMSBuild builds a solution on a system that has two processors, then only two build processes are created. Ces processus sont réutilisés pour générer tous les projets dans la solution.These processes are re-used to build all the projects in the solution.

Voir aussiSee also

Générer plusieurs projets en parallèle Build multiple projects in parallel
TâchesTasks