Comment : utiliser la même cible dans plusieurs fichiers projet
Mise à jour : novembre 2007
Si vous avez créé plusieurs fichiers projet MSBuild, vous avez peut-être constaté que vous deviez utiliser les mêmes tâches et cibles dans des fichiers projet différents. Au lieu d'inclure la description complète de ces tâches ou cibles dans chaque fichier projet, vous pouvez enregistrer une cible dans un fichier projet distinct, puis importer ce projet dans un autre projet devant utiliser la cible.
Utilisation de l'élément import
L'élément Import est utilisé pour insérer un fichier projet dans un autre fichier projet. Le fichier projet importé doit être un fichier projet MSBuild valide et contenir un code XML correct. L'attribut Project spécifie le chemin d'accès au fichier projet importé. Pour plus d'informations sur l'élément Import, consultez Import, élément (MSBuild).
Pour importer un projet
Définissez, dans le fichier projet importateur, l'ensemble des propriétés et des éléments utilisés comme paramètres des propriétés et des éléments du projet importé.
Utilisez l'élément Import pour importer le projet. Par exemple :
<Import Project="MyCommon.targets"/>
Après l'élément Import, définissez l'ensemble des propriétés et des éléments qui doivent substituer les définitions par défaut des propriétés et des éléments du projet importé.
Ordre d'évaluation
Lorsque MSBuild atteint un élément Import, le projet importé est inséré dans le projet importateur à l'emplacement de l'élément Import. Par conséquent, l'emplacement de l'élément Import peut affecter les valeurs des propriétés et des éléments. Il importe de bien distinguer les propriétés et les éléments définis par le projet importé de celles et ceux qu'il utilise.
Lors de la génération du projet, toutes les propriétés sont évaluées en premier, suivies par les éléments. Par exemple, le code XML suivant définit le fichier projet importé MyCommon.targets :
<Project xmlns=”https://schemas.microsoft.com/developer/msbuild/2003”>
<PropertyGroup>
<Name>MyCommon</Name>
</PropertyGroup>
<Target Name="Go">
<Message Text="Name="$(Name)""/>
</Target>
</Project>
Le code XML suivant définit MyApp.proj, qui importe MyCommon.targets :
<Project
DefaultTargets="Go"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
Lors de la génération du projet, le message suivant s'affiche :
Name="MyCommon"
Comme le projet est importé après que la propriété Name a été définie dans MyApp.proj, la définition de Name dans MyCommon.targets substitue la définition dans MyApp.proj. Si le projet est importé avant que la propriété Name ne soit définie, la génération affiche le message suivant :
Name="MyApp"
Utilisez la solution suivante lors de l'importation de projets :
Définissez, dans le fichier projet, l'ensemble des propriétés et des éléments utilisés comme paramètres des propriétés et des éléments du projet importé.
Importez le projet.
Définissez dans le fichier projet l'ensemble des propriétés et des éléments qui doivent substituer les définitions par défaut des propriétés et des éléments du projet importé.
Exemple
L'exemple de code suivant affiche le fichier MyCommon.targets, que le second exemple de code importe. Le fichier .targets évalue les propriétés du projet importateur pour configurer la génération.
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
<Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
<appname>$(MSBuildProjectName)</appname>
<PropertyGroup>
<Target Name="Build">
<Csc Sources="hello.cs"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe"/>
</Target>
</Project>
L'exemple de code suivant importe le fichier MyCommon.targets.
<Project DefaultTargets="Build"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>