Partager via


Import, élément (MSBuild)

Importe le contenu d'un fichier projet dans un autre fichier projet.

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

Attributs et éléments

Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.

Attributs

Attribut

Description

Project

Attribut requis.

Chemin d'accès du fichier projet à importer. Le chemin d'accès peut inclure des caractères génériques. Les fichiers correspondants sont importés dans l'ordre de tri. Cette fonctionnalité vous permet d'ajouter du code à un projet en ajoutant simplement le fichier de code à un répertoire.

Condition

Attribut facultatif.

Condition à évaluer. Pour plus d'informations, consultez Conditions MSBuild.

Éléments enfants

Aucun

Éléments parents

Élément

Description

Projet

Élément racine requis d'un fichier projet MSBuild.

ImportGroup

Contient une collection d'éléments Import regroupés sous une condition facultative.

Notes

L'élément Import vous permet de réutiliser le code commun à de nombreux fichiers projet. Cela rend plus facile la gestion du code, car toute mise à jour apportée au code partagé est propagée à tous les projets qui l'importent.

Par convention, les fichiers projet importés partagés sont enregistrés en tant que fichiers .targets, mais ils sont en réalité des fichiers projet MSBuild standard. MSBuild ne vous empêche pas d'importer un projet avec une extension de nom de fichier différente, mais nous vous recommandons d'utiliser l'extension .targets pour des raisons de cohérence.

Les chemins d'accès relatifs dans les projets importés sont interprétés en fonction du répertoire du projet importateur. Par conséquent, si un fichier projet est importé dans plusieurs fichiers projet résidant dans différents emplacements, les chemins d'accès relatifs dans le fichier projet importé seront interprétés différemment pour chaque projet importé.

Les valeurs assignées à toutes les propriétés réservées de MSBuild, associées au fichier projet, par exemple MSBuildProjectDirectory et MSBuildProjectFile, et référencées dans un projet importé, dépendent du fichier projet importateur.

Si le projet importé n'a pas d'attribut DefaultTargets, les projets importés sont examinés dans l'ordre de leur importation, et la valeur du premier attribut DefaultTargets découvert est utilisée. Si, par exemple, le projet A importe le projet B et le projet C (dans cet ordre), et que le projet B importe le projet D, MSBuild recherche d'abord l'attribut DefaultTargets spécifié pour le projet A, ensuite le projet B, puis le projet D et enfin le projet C.

Le schéma d'un projet importé est identique à celui d'un projet standard. Bien que MSBuild puisse être en mesure de construire un projet importé, cela est peu probable, car un projet importé ne contient généralement pas d'informations sur les propriétés à définir ou l'ordre dans lequel exécuter les cibles. Le projet importé dépend du projet dans lequel il est importé pour fournir cette information.

Notes

Alors que les instructions import conditionnelles fonctionnent en ligne de commande MSBuilds, elles ne fonctionnent pas avec MSBuild dans l'environnement de développement intégré (IDE) Visual Studio.Les importations conditionnelles sont évaluées sur la base de la configuration initiale et des valeurs de la plateforme, définies lorsque le projet est chargé. Si, par la suite, des modifications sont apportées et qu'elles nécessitent la réévaluation des conditions dans le fichier projet, telles qu'une modification de la plateforme, Visual Studio réévalue les conditions sur les propriétés et les éléments, mais pas les importations.Les conditions d'importation n'étant pas réévaluées, l'importation est ignorée.

Pour contourner ce problème, placez les importations conditionnelles dans les fichiers .targets ou placez le code source dans un bloc conditionnel comme Choose, élément (MSBuild).

Caractères génériques

Dans .NET Framework 4, MSBuild autorise les caractères génériques dans l'attribut Project. Si des caractères génériques sont présents, toutes les correspondances trouvées sont triées (pour la reproductibilité), puis sont importées dans cet ordre comme si celui-ci avait été défini explicitement.

Cela est utile si vous souhaitez offrir un point d'extensibilité afin que quelqu'un d'autre puisse importer un fichier sans que vous ayez besoin d'ajouter explicitement le nom du fichier concerné. À cette fin, Microsoft.Common.Targets contient la ligne suivante en haut du fichier.

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>

Exemple

L'exemple suivant montre un projet avec plusieurs éléments et propriétés, qui importe un fichier projet général.

<Project DefaultTargets="Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <resourcefile>Strings.resx</resourcefile>

        <compiledresources>
            $(O)\$(MSBuildProjectName).Strings.resources
        </compiledresources>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="*.cs" />

        <Reference Include="System" />
        <Reference Include="System.Data" />
    </ItemGroup>

    <Import Project="$(CommonLocation)\General.targets" />
</Project>

Voir aussi

Tâches

Comment : utiliser la même cible dans plusieurs fichiers projet

Concepts

Référence du schéma de fichier de projet MSBuild