Partager via


Tâche MSBuild

Génère des projets MSBuild à partir d’un autre projet MSBuild.

Paramètres

Le tableau suivant décrit les paramètres de la tâche MSBuild.

Paramètre Description
BuildInParallel Paramètre Boolean facultatif.

Si true, les projets spécifiés dans le paramètre Projects sont intégrés en parallèle s’il est possible. La valeur par défaut est false.
Projects Paramètre ITaskItem[] obligatoire.

Spécifie les fichiers projet à générer.
Properties Paramètre String facultatif.

Liste délimitée par des points-virgules de paires nom/valeur de propriété à appliquer en tant que propriétés globales au projet enfant. Lorsque vous spécifiez ce paramètre, il est fonctionnellement équivalent à la définition des propriétés qui ont le commutateur -property lorsque vous générez avec MSBuild.exe. Par exemple:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Lorsque vous transmettez des propriétés au projet via le paramètre Properties, MSBuild peut créer une instance du projet même si le fichier projet a déjà été chargé. MSBuild crée une instance de projet unique pour un chemin de projet donné et un ensemble unique de propriétés globales. Par exemple, ce comportement vous permet de créer plusieurs tâches MSBuild qui appellent myproject.proj, avec Configuration=Release et vous obtenez une seule instance de myproject.proj (si aucune propriété unique n’est spécifiée dans la tâche). Si vous spécifiez une propriété qui n’a pas encore été vue par MSBuild, MSBuild crée une nouvelle instance du projet, qui peut être générée en parallèle avec d’autres instances du projet. Par exemple, une configuration Release peut générer en même temps qu’une configuration de débogage.
RebaseOutputs Paramètre Boolean facultatif.

Si true, les chemins d’accès relatifs des éléments de sortie cible des projets générés ont leurs chemins ajustés pour être relatifs au projet appelant. La valeur par défaut est false.
RemoveProperties Paramètre String facultatif.

Spécifie l’ensemble des propriétés globales à supprimer.
RunEachTargetSeparately Paramètre Boolean facultatif.

Si true, la tâche MSBuild appelle chaque cible de la liste passée à MSBuild une par une, au lieu de la même chose. La définition de ce paramètre pour true garantit que les cibles suivantes sont appelées même si des cibles précédemment appelées ont échoué. Sinon, une erreur de génération arrête l’appel de toutes les cibles suivantes. La valeur par défaut est false.
SkipNonexistentProjects Paramètre Boolean facultatif.

Si true, les fichiers projet qui n’existent pas sur le disque sont ignorés. Dans le cas contraire, ces projets entraînent une erreur. La valeur par défaut est false.
SkipNonexistentTargets Paramètre Boolean facultatif.

Si true, les fichiers projet qui existent mais qui ne contiennent pas les Targets nommés sont ignorés. Dans le cas contraire, ces projets entraînent une erreur. La valeur par défaut est false. Introduit dans MSBuild 15.5.
StopOnFirstFailure Paramètre Boolean facultatif.

Si true, quand l’un des projets ne parvient pas à générer, aucun autre projet n’est généré. Actuellement, cette option n’est pas prise en charge lors de la génération en parallèle (avec plusieurs processeurs).
TargetAndPropertyListSeparators Paramètre String[] facultatif.

Spécifie une liste de cibles et de propriétés en tant que métadonnées d’élément Project). Les séparateurs ne sont pas bouctés avant le traitement. Par exemple, %3B (une séquence d’échappement ' ;') est traitée comme s’il s’agissait d’un ' ;'.
TargetOutputs Paramètre de sortie en lecture seule ITaskItem[] facultatif.

Retourne les sorties des cibles générées à partir de tous les fichiers projet. Seules les sorties des cibles spécifiées sont retournées, et non les sorties qui peuvent exister sur les cibles dont dépendent ces cibles.

Le paramètre TargetOutputs contient également les métadonnées suivantes :

- MSBuildSourceProjectFile: fichier projet MSBuild qui contient la cible qui définit les sorties.
- MSBuildSourceTargetName: cible qui définit les sorties. Remarque : Si vous souhaitez identifier les sorties de chaque fichier projet ou cible séparément, exécutez la tâche MSBuild séparément pour chaque fichier projet ou cible. Si vous exécutez la tâche MSBuild une seule fois pour générer tous les fichiers projet, les sorties de toutes les cibles sont collectées dans un tableau.
Targets Paramètre String facultatif.

Spécifie la cible ou les cibles à générer dans les fichiers projet. Utilisez un point-virgule pour séparer une liste de noms cibles. Si aucune cible n’est spécifiée dans la tâche MSBuild, les cibles par défaut spécifiées dans les fichiers projet sont générées. Remarque : Les cibles doivent se produire dans tous les fichiers projet. Si ce n’est pas le cas, une erreur de génération se produit.
ToolsVersion Paramètre String facultatif.

Spécifie la ToolsVersion à utiliser lors de la génération de projets passés à cette tâche.

Permet à une tâche MSBuild de générer un projet qui cible une version différente du .NET Framework que celle spécifiée dans le projet. Les valeurs valides sont 2.0, 3.0 et 3.5. La valeur par défaut est 3.5.

Remarques

Outre les paramètres répertoriés précédemment, cette tâche hérite des paramètres de la classe TaskExtension, qui hérite elle-même de la classe Task. Pour obtenir la liste de ces paramètres supplémentaires et de leurs descriptions, consultez classe de base TaskExtension.

Contrairement à l’utilisation de la tâche Exec pour démarrer MSBuild.exe, cette tâche utilise le même processus MSBuild pour générer les projets enfants. La liste des cibles déjà créées qui peuvent être ignorées est partagée entre les builds parent et enfant. Cette tâche est également plus rapide, car aucun nouveau processus MSBuild n’est créé.

Cette tâche peut traiter non seulement les fichiers projet, mais également les fichiers solution. Dans MSBuild 17.12 et versions ultérieures, les formats de fichier de solution .slnx et .sln sont acceptés.

Toute configuration requise par MSBuild pour permettre aux projets de générer en même temps, même si la configuration implique une infrastructure distante (par exemple, des ports, des protocoles, des délais d’attente, des nouvelles tentatives, etc.) doit être configurée à l’aide d’un fichier de configuration. Dans la mesure du possible, les éléments de configuration doivent être spécifiés en tant que paramètres de tâche sur la tâche MSBuild.

À compter de MSBuild 3.5, les projets de solution surfacent désormais TargetOutputs à partir de tous les sous-projets qu’il génère.

Transmettre des propriétés à des projets

Dans les versions de MSBuild antérieures à MSBuild 3.5, le passage de différents ensembles de propriétés à différents projets répertoriés dans l’élément MSBuild était difficile. Si vous avez utilisé l’attribut Propriétés de la tâche MSBuild, son paramètre a été appliqué à tous les projets générés, sauf si vous avez loté la tâche MSBuild et fourni des propriétés différentes pour chaque projet dans la liste d’éléments.

TOUTEFOIS, MSBuild 3.5 fournit deux nouveaux éléments de métadonnées réservés, Propriétés et AdditionalProperties, qui vous permettent de transmettre des propriétés différentes pour différents projets générés à l’aide de la tâche MSBuild .

Remarque

Ces nouveaux éléments de métadonnées s’appliquent uniquement aux éléments transmis dans l’attribut Projects de la tâche MSBuild .

Avantages de la génération multiprocesseur

L’un des principaux avantages de l’utilisation de ces nouvelles métadonnées se produit lorsque vous générez vos projets en parallèle sur un système multiprocesseur. Les métadonnées vous permettent de consolider tous les projets en une seule tâche MSBuild appel sans avoir à effectuer de traitement par lots ou de tâches MSBuild conditionnelles. Et quand vous appelez une seule tâche MSBuild, tous les projets répertoriés dans l’attribut Projects sont intégrés en parallèle. (Toutefois, uniquement si l’attribut BuildInParallel=true est présent dans la tâche MSBuild .) Pour plus d’informations, consultez Générer plusieurs projets en parallèle.

Métadonnées des propriétés

Quand elles sont spécifiées, les métadonnées Propriétés remplacent le paramètre Properties de la tâche, tandis que AdditionalProperties métadonnées sont ajoutées aux définitions du paramètre.

Un scénario courant est que vous générez plusieurs fichiers de solution à l’aide de la tâche MSBuild , uniquement à l’aide de différentes configurations de build. Vous pouvez créer une solution a1 à l’aide de la configuration de débogage et de la solution a2 à l’aide de la configuration Release. Dans MSBuild 2.0, ce fichier projet se présente comme suit :

Remarque

Dans l’exemple suivant, « ... » représente des fichiers de solution supplémentaires.

a.proj

<Project>
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

Toutefois, en utilisant les métadonnées Propriétés, vous pouvez simplifier ce code pour utiliser une tâche MSBuild unique , comme illustré dans l’exemple suivant :

a.proj

<Project>
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"/>
    </Target>
</Project>

- ou -

<Project>
    <ItemGroup>
        <ProjectToBuild Include="a1.sln..."/>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Debug"/>
    </Target>
</Project>

Métadonnées AdditionalProperties

Considérez le scénario suivant dans lequel vous créez deux fichiers de solution à l’aide de la tâche MSBuild , à la fois à l’aide de la configuration Release, mais l’un utilisant l’architecture x86 et l’autre à l’aide de l’architecture ia64. Dans MSBuild 2.0, vous devez créer plusieurs instances de la tâche MSBuild: une pour générer le projet à l’aide de la configuration Release avec l’architecture x86, l’autre à l’aide de la configuration Release avec l’architecture ia64. Votre fichier projet se présente comme suit :

a.proj

<Project>
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Release;
          Architecture=x86"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release;
          Architecture=ia64"/>
    </Target>
</Project>

En utilisant les métadonnées AdditionalProperties, vous pouvez simplifier cette opération pour utiliser une tâche MSBuild unique à l’aide des éléments suivants :

a.proj

<Project>
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <AdditionalProperties>Architecture=x86
              </AdditionalProperties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <AdditionalProperties>Architecture=ia64
              </AdditionalProperties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Release"/>
    </Target>
</Project>

Exemple :

L’exemple suivant utilise la tâche MSBuild pour générer les projets spécifiés par la collection d’éléments ProjectReferences. Les sorties cibles obtenues sont stockées dans la collection d’éléments AssembliesBuiltByChildProjects.

<Project>

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildOtherProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

</Project>

Voir aussi