Partager via


Sélectionnez les fichiers à générer

Dans la plupart des projets, vous n’avez pas besoin de sélectionner spécifiquement les fichiers à générer. Par exemple, tout projet créé avec Visual Studio génère tous les fichiers sources dans le projet. Toutefois, vous devrez peut-être savoir comment modifier votre fichier projet pour gérer les scénarios qui diffèrent de la valeur par défaut, par exemple lorsque vous souhaitez générer des fichiers à partir d’autres emplacements en dehors des dossiers de projet, ou lorsque vous créez votre propre processus de génération au lieu d’utiliser un KIT de développement logiciel (SDK) tel que le Kit de développement logiciel (SDK) .NET.

Comportement par défaut par type de projet

Le comportement par défaut qui détermine les fichiers inclus par MSBuild dans la build diffère par type de projet.

Pour les projets du Kit de développement logiciel (SDK) .NET standard, le Kit de développement logiciel (SDK) .NET standard définit une liste d’éléments par défaut Compile qui contient des fichiers dans l’arborescence des dossiers du projet qui correspondent à l’extension de fichier spécifique au langage appropriée. Par exemple, pour un projet C#, l’élément Compile est rempli avec le modèle **/*.csglob, qui correspond à tous les fichiers sources dans le dossier du projet et à tous ses sous-dossiers de manière récursive. Vous ne voyez pas l’élément Compile dans le fichier projet, car il est défini dans le fichier sdk .props importé implicitement. Consultez la vue d’ensemble du Kit de développement logiciel (SDK) du projet .NET : inclut et exclut par défaut.

Si vous utilisez Visual Studio, vous pouvez modifier l’ensemble de fichiers sources à générer en modifiant l’action de génération sur un fichier. Définissez-le sur None pour exclure un fichier de la compilation. L’application de cette modification dans Visual Studio affecte le fichier projet. Visual Studio ajoute des lignes pour supprimer le fichier source de la Compile liste d’éléments et l’ajouter à la liste d’éléments None .

  <ItemGroup>
    <Compile Remove="Class.cs" />
  </ItemGroup>

  <ItemGroup>
    <None Include="Class.cs" />
  </ItemGroup>

Pour .NET Framework ou d’autres projets non sdk, l’élément Compile est construit explicitement dans le fichier projet en répertoriant tous les fichiers sources.

Pour les projets C++, les fichiers sources sont explicitement ajoutés à l’élément ClCompile du fichier projet.

Lorsque vous créez manuellement un fichier projet MSBuild sans utiliser de SDK, vous pouvez répertorier chaque fichier source séparément dans le fichier projet, ou vous pouvez utiliser des caractères génériques pour inclure tous les fichiers d’un répertoire ou un ensemble imbriqué de répertoires. Vous pouvez également utiliser les techniques de cet article pour modifier la Compile liste d’éléments (dans les projets .NET) ou ClCompile la liste d’éléments dans les projets C++ pour personnaliser les fichiers générés.

Spécifier des entrées

Les éléments représentent les entrées (telles que les fichiers sources) d’une build. Pour plus d’informations sur les éléments, consultez Éléments.

Pour inclure des fichiers pour une build, ils doivent être inclus dans une liste d’éléments. Comme indiqué précédemment, dans les projets .NET SDK et .NET Framework, la liste des éléments pour les fichiers sources est Compile. Vous ne voyez pas la Compile liste des éléments dans les projets du Kit de développement logiciel (SDK) .NET, car elle est définie dans les importations implicites. Consultez Utiliser les kits SDK de projet.

Les fichiers projet qui ne reposent pas sur les importations standard peuvent utiliser un nom de liste d’éléments arbitraire, tel que VBFile ou CSFile. Consultez l’exemple 1 et l’exemple 2 plus loin dans cet article. Pour configurer une build basée sur la liste d’éléments, vous passez la liste d’éléments par nom à une tâche de génération, comme indiqué plus loin dans cet article.

Plusieurs fichiers peuvent être ajoutés à des listes d’éléments en incluant les fichiers individuellement ou en utilisant des caractères génériques pour inclure plusieurs fichiers à la fois.

Pour déclarer des éléments individuellement

  • Utilisez les Include attributs similaires à ceux-ci :

    <Compile Include="Form1.cs"/>

    ou

    <Compile Include="Form1.vb"/>

    Note

    Si les éléments d’une collection d’éléments ne se trouvent pas dans le même répertoire que le fichier projet, vous devez spécifier le chemin complet ou relatif de l’élément. Par exemple : Include="..\..\Form2.cs".

La même liste d’éléments peut être modifiée à plusieurs reprises par plusieurs Include attributs. Chaque Include s'ajoute à ce qui était là auparavant.

Pour déclarer plusieurs éléments

  • Utilisez les attributs Include similaires comme suit :

    <Compile Include="Form1.cs;Form2.cs"/>

    ou

    <Compile Include="Form1.vb;Form2.vb"/>

Spécifier des entrées avec des caractères génériques

Vous pouvez également utiliser des caractères génériques pour inclure de manière récursive tous les fichiers ou uniquement des fichiers spécifiques à partir de sous-répertoires en tant qu’entrées pour une build. Pour plus d’informations sur les caractères génériques, consultez Éléments

Les exemples suivants sont basés sur un projet qui contient des fichiers graphiques dans les répertoires et sous-répertoires suivants, avec le fichier projet situé dans le répertoire Project :

Project\Images\BestJpgs

Project\Images\ImgJpgs

Project\Images\ImgJpgs\Img1

Pour inclure tous les fichiers .jpgdans le répertoire Images et les sous-répertoires

  • Utilisez l’attribut suivant Include :

    Include="Images\**\*.jpg"

Pour inclure tous les fichiers .jpg à partir d’img

  • Utilisez l’attribut suivant Include :

    Include="Images\**\img*.jpg"

Pour inclure tous les fichiers dans les répertoires avec des noms se terminant par jpgs

  • Utilisez l’un des attributs suivants Include :

    Include="Images\**\*jpgs\*.*"

    ou

    Include="Images\**\*jpgs\*"

Exclusion et suppression d’éléments

Vous pouvez spécifier des fichiers qui correspondent à un certain modèle, à certaines exceptions près. Vous pouvez le faire dans une seule opération avec une combinaison de Include et Exclude.

<ItemGroup>
  <!-- Include every C# source file, except anything in the "sub" folder -->
  <Compile Include="**/*.cs" Exclude="sub/**/*.cs">
</ItemGroup>

Pour supprimer un élément précédemment inclus ou inclus par défaut par un KIT de développement logiciel (SDK), vous pouvez utiliser l’attribut Remove .

<ItemGroup>
  <!-- Remove anything in the "sub" folder -->
  <Compile Remove="sub/**/*.cs">
</ItemGroup>

Passer des éléments à une tâche ou une cible

Dans la plupart des fichiers projet, vous n’avez pas besoin de transmettre explicitement l’élément Compile à une cible ou une tâche, car cela est géré par les importations standard. Toutefois, dans le cas d'une cible de fichier projet, vous pouvez utiliser la notation dans les tâches @() pour spécifier une liste d'éléments entière comme entrée pour une compilation. Vous pouvez utiliser cette notation si vous répertoriez tous les fichiers séparément ou utilisez des caractères génériques.

Pour utiliser tous les fichiers C# ou Visual Basic en tant qu’entrées dans une tâche du compilateur

  • Utilisez les Include attributs similaires à ce qui suit :

    <CSC Sources="@(CSFile)">...</CSC>

    ou

    <VBC Sources="@(VBFile)">...</VBC>

Note

Vous devez utiliser des caractères génériques avec des éléments pour spécifier les entrées d’une build ; vous ne pouvez pas spécifier les entrées à l’aide de l’attribut Sources dans les tâches MSBuild telles que Csc ou Vbc. L’exemple suivant n’est pas valide dans un fichier projet :

<CSC Sources="*.cs">...</CSC>

Exemple 1

L’exemple de code suivant montre un projet qui inclut tous les fichiers d’entrée séparément.

<Project DefaultTargets="Compile">
    <PropertyGroup>
        <Builtdir>built</Builtdir>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="Form1.cs"/>
        <CSFile Include="AssemblyInfo.cs"/>

        <Reference Include="System.dll"/>
        <Reference Include="System.Data.dll"/>
        <Reference Include="System.Drawing.dll"/>
        <Reference Include="System.Windows.Forms.dll"/>
        <Reference Include="System.XML.dll"/>
    </ItemGroup>

    <Target Name="PreBuild">
        <Exec Command="if not exist $(builtdir) md $(builtdir)"/>
    </Target>

    <Target Name="Compile" DependsOnTargets="PreBuild">
        <Csc Sources="@(CSFile)"
            References="@(Reference)"
            OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
            TargetType="exe" />
    </Target>
</Project>

Exemple 2

L’exemple de code suivant utilise un caractère générique pour inclure tous les fichiers .cs .

<Project DefaultTargets="Compile">

    <PropertyGroup>
        <builtdir>built</builtdir>
    </PropertyGroup>

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

        <Reference Include="System.dll"/>
        <Reference Include="System.Data.dll"/>
        <Reference Include="System.Drawing.dll"/>
        <Reference Include="System.Windows.Forms.dll"/>
        <Reference Include="System.XML.dll"/>
    </ItemGroup>

    <Target Name="PreBuild">
        <Exec Command="if not exist $(builtdir) md $(builtdir)"/>
    </Target>

    <Target Name="Compile" DependsOnTargets="PreBuild">
        <Csc Sources="@(CSFile)"
            References="@(Reference)"
            OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
            TargetType="exe" />
    </Target>
</Project>