Partager via


MSBuild utilise plusieurs processeurs pour générer des projets

MSBuild peut tirer pleinement parti des systèmes qui ont plusieurs processeurs ou processeurs à plusieurs cœurs en créant un processus de génération distinct pour chaque processeur. Par exemple, si un système a quatre processeurs, MSBuild crée quatre processus de génération.

MSBuild peut traiter simultanément les plusieurs builds, ce qui réduit le temps de génération global. Toutefois, les builds parallèles peuvent introduire des modifications dans la façon dont les processus de génération se produisent.

Cet article décrit les modifications de processus qui peuvent se produire lorsque plusieurs builds s’exécutent simultanément.

Références de projet à projet

Lorsque le moteur de build Microsoft rencontre une référence de projet (ProjectReference élément) pendant les builds parallèles d’un projet, il génère la référence une seule fois. Si deux projets ont la même référence de projet, la référence n’est pas reconstruite pour chaque projet. Au lieu de cela, le moteur de build retourne la même référence de projet aux deux projets qui ont la dépendance. MSBuild fournit également la même référence de projet aux futures demandes de la session concernant la même cible.

Détection de cycle

La détection de cycle pendant les builds parallèles est le même comportement que pour MSBuild 2.0. La seule différence est que la version la plus récente de MSBuild peut signaler la détection du cycle à un autre moment ou dans la build.

Erreurs et exceptions pendant les builds parallèles

Pendant les builds parallèles, des erreurs et des exceptions peuvent se produire à des moments différents que lors d’une build nonparallel. En outre, si un projet ne génère pas, les autres builds du projet continuent.

MSBuild n’arrête aucune génération de projet qui s'exécute parallèlement à une autre qui a échoué. D’autres projets continuent de générer jusqu’à ce qu’ils réussissent ou échouent. Lorsque le ContinueOnError paramètre est activé, aucune build n’est arrêtée, même si une erreur se produit.

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

Les fichiers de projet C++ (.vcxproj) et de solution (.sln) peuvent être transmis à la tâche MSBuild.

  • Projets C++ : l’API VCWrapperProject est appelée, puis le projet MSBuild interne est créé.
  • Solutions C++ : une instance SolutionWrapperProject est créée, puis le projet MSBuild interne est créé.

Dans les deux cas, le projet résultant est géré comme n’importe quel autre projet MSBuild.

Exécution de plusieurs processus

Presque toutes les activités liées à la compilation nécessitent que le répertoire courant reste constant tout au long du processus de compilation pour éviter les erreurs liées au chemin d'accès. Les projets ne peuvent pas s’exécuter sur différents threads dans MSBuild, car ils peuvent entraîner la création de plusieurs répertoires.

Pour éviter ce problème, mais toujours activer les builds multiprocesseur, MSBuild utilise l’isolation des processus. Ce processus a permis à MSBuild de 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 avec 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.