Utiliser plusieurs processeurs pour générer des projets

MSBuild permet d’exploiter des systèmes dotés de plusieurs processeurs ou de processeurs à plusieurs cœurs. Un processus de génération séparé est créé pour chaque processeur disponible. Par exemple, si le système comporte quatre processeurs, quatre processus de génération sont créés. MSBuild peut traiter ces builds simultanément et, par conséquent, la durée globale de génération est réduite. Toutefois, la génération parallèle introduit des modifications dans le déroulement du processus de génération. Cette rubrique aborde ces modifications.

Références entre projets

Quand Microsoft Build Engine rencontre une référence entre projets (P2P) lorsqu’il utilise des builds parallèles pour générer un projet, il génère la référence une seule fois. Si deux projets ont la même référence P2P, elle n’est pas régénérée pour chaque projet. 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. La même référence P2P est fournie aux futures demandes de la session concernant la même cible.

Détection de cycle

La détection de cycle fonctionne de la même manière que dans MSBuild 2.0, si ce n’est que MSBuild peut désormais signaler la détection du cycle à un autre moment ou dans le build.

Erreurs et exceptions pendant les générations parallèles

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. MSBuild n’arrête aucune génération de projet qui s’exécute parallèlement à celle qui a échoué. La génération d’autres projets continue jusqu’à ce qu’elles réussissent ou échouent. Toutefois, si ContinueOnError a été activé, aucune génération ne s’arrête, même si une erreur se produit.

Fichiers projet (.vcxproj) et solution (.sln) C++

Vous pouvez transmettre les fichiers projet (.vcxproj) et solution (.sln) à la tâche MSBuild. Pour les projets C++, VCWrapperProject est appelé, puis le projet MSBuild interne est créé. Pour les solutions C++, un SolutionWrapperProject est créé, puis le projet MSBuild interne est créé. Dans les deux cas, le projet résultant est traité comme tout autre projet MSBuild.

Exécution de plusieurs processus

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. Les projets ne peuvent donc pas s’exécuter sur des threads différents dans MSBuild, car ils provoqueraient la création de plusieurs répertoires.

Pour éviter ce problème tout en activant les builds multiprocesseurs, MSBuild utilise « l’isolation des processus ». En utilisant l’isolation des processus, MSBuild peut créer un maximum de n processus, où n est égal au nombre de processeurs disponibles sur le système. Par exemple, si MSBuild génère une solution sur un système à deux processeurs, seuls deux processus de génération sont créés. Ces processus sont réutilisés pour générer tous les projets dans la solution.