Générer plusieurs projets en parallèle avec MSBuild

Vous pouvez utiliser MSBuild pour générer plus rapidement plusieurs projets en les exécutant en parallèle. Pour exécuter des builds en parallèle, vous utilisez les paramètres suivants sur un ordinateur multicœur ou multiprocesseur :

  • Le commutateur -maxcpucount à une invite de commande.

  • Le paramètre de tâche BuildInParallel sur une tâche MSBuild.

Notes

Le commutateur -verbosity (-v) en ligne de commande peut aussi affecter les performances de build. Les performances de génération risquent de diminuer si le niveau de détail de vos informations de journal de génération est défini sur « détaillé » ou « diagnostic ». Ces niveaux sont utilisés pour le dépannage. Pour plus d’informations, voir Obtenir des journaux de génération et Informations de référence sur la ligne de commande.

Commutateur -maxcpucount

Si vous utilisez le commutateur -maxcpucount, ou -m pour faire court, MSBuild peut créer le nombre spécifié de processus MSBuild.exe qui peuvent être exécutés en parallèle. Ces processus sont également appelés « processus Worker ». Chaque processus Worker utilise un processeur ou cœur distinct, sous réserve de disponibilité, pour générer un projet pendant que d’autres processeurs disponibles génèrent d’autres projets. Par exemple, si vous affectez la valeur « 4 » à ce commutateur, MSBuild crée quatre processus de travail pour générer le projet.

Si vous incluez le commutateur -maxcpucount sans spécifier de valeur, MSBuild utilise le nombre de processeurs dont est équipé l’ordinateur.

Pour plus d’informations sur ce commutateur, qui est une nouveauté de MSBuild 3.5, consultez Informations de référence sur la ligne de commande.

L’exemple suivant fait en sorte que MSBuild utilise trois processus de travail. Si vous utilisez cette configuration, MSBuild peut générer trois projets en même temps.

msbuild.exe myproj.proj -maxcpucount:3

Paramètre de tâche BuildInParallel

BuildInParallel est un paramètre booléen facultatif sur une tâche MSBuild. Quand BuildInParallel a la valeur true (sa valeur par défaut est true), plusieurs processus de travail sont créés pour générer le plus de projets possible simultanément. Pour que cela fonctionne correctement, le commutateur -maxcpucount doit être défini sur une valeur supérieure à 1.

La création en parallèle fonctionne uniquement pour un appel unique de la tâche MSBuild. Par conséquent, si vous appelez le traitement par lots de tâches, le parallélisme est limité à chaque lot. Consultez Traitement par lots de MSBuild.

L’exemple suivant montre comment générer une cible dans un fichier projet avec plusieurs valeurs de propriété différentes en parallèle à l’aide du paramètre BuildInParallel.

Voici le fichier projet do_it.proj avec une cible qui imprime simplement un message différent pour chaque SourceValue :

<Project>
   <Target Name="DoIt">
      <Message Text="For this invocation SourceValue='$(SourceValue)'" Importance="High" />
   </Target>
</Project>

Le projet suivant génère une cible DoIt spécifiée dans do_it.proj en parallèle, à l’aide de la liste d’éléments et des métadonnées AdditionalProperties pour spécifier différentes valeurs de la propriété SourceValue.

<Project>
   <ItemGroup>
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test1" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test2" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test3" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test4" />
   </ItemGroup>
   <Target Name="Build">
      <MSBuild Projects="@(_Project)" Targets="DoIt" BuildInParallel="true" />
   </Target>
</Project>