Partager via


Exclure des fichiers de la build

Dans un fichier projet, 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 comme des entrées d’une génération. Toutefois, il se peut que vous ne souhaitiez pas inclure un fichier du répertoire ou un répertoire d’un ensemble imbriqué de répertoires comme entrée d’une génération. Vous pouvez explicitement exclure ce fichier ou ce répertoire de la liste d’entrées. Il peut également s’agir d’un fichier d’un projet que vous ne souhaitez inclure que dans certaines conditions. Vous pouvez déclarer explicitement les conditions dans lesquelles un fichier est inclus dans une génération.

Remarque

Les techniques décrites dans cet article ne s’appliquent pas à F# et C++. Ces systèmes de projet gèrent eux-mêmes les fichiers sources.

Exclure un fichier avec Visual Studio

Si vous utilisez Visual Studio, sélectionnez le fichier dans l’Explorateur de solutions, affichez la fenêtre Propriétés (appuyez sur Alt+Entrée) et définissez l’Action de génération sur Aucune.

Cela entraîne les modifications suivantes dans le fichier projet MSBuild :

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

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

Cela fonctionne bien pour un petit nombre de fichiers, mais ne s’adapte pas à un plus grand nombre de fichiers, ou à des fichiers qui correspondent à un certain modèle. Dans les projets .NET, vous pouvez utiliser MSBuild pour exclure des fichiers et des répertoires à l’aide d’une expression générique, également appelée glob, comme décrit ci-dessous.

Exclure des fichiers ou des répertoires dans les projets .NET

Les listes d’éléments constituent les fichiers d’entrée d’une génération. Pour la plupart des projets, tels que les projets du Kit de développement logiciel (SDK) .NET, il existe des listes prédéfinies d’éléments de différents types d’éléments (par exemple, Compile pour les fichiers sources, Content pour certains fichiers statiques, etc.) qui sont déjà définis par les importations standard. Vous trouverez la liste de ces éléments dans Éléments communs des projets MSBuild. Dans le code de votre projet, ceux-ci sont prédéfinis pour inclure tous les éléments pertinents ; par exemple, Compile dans un projet C# inclut tous les fichiers avec l’extension .cs.

Pour exclure des fichiers, vous pouvez utiliser l’attribut Remove sur l’élément.

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

Vous pouvez spécifier plusieurs fichiers individuels ou différents modèles glob :

<ItemGroup>
   <Compile Remove="Contoso*.cs" /> <!-- Wildcard on filename -->
   <Compile Remove="File1.cs;File2.cs" /> <!-- List of files with separator -->
   <Compile Remove="Contoso/**/*.cs" /> <!-- All .cs files in a directory subtree -->
</ItemGroup>

Pour obtenir la liste des modèles pris en charge, consultez Formats de modèle.

Inclure et exclure des fichiers ou répertoires dans le langage MSBuild

Dans le langage MSBuild brut (autrement dit, sans aucune importation ou référence standard à un SDK), les éléments que vous souhaitez inclure sont déclarés séparément ou en tant que groupe à l’aide de l’attribut Include. Par exemple :

<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>

Si vous utilisez des caractères génériques pour inclure tous les fichiers d’un répertoire ou un ensemble imbriqué de répertoires comme entrées d’une build, il se peut que vous ne vouliez pas inclure un ou plusieurs fichiers du répertoire ou un répertoire de l’ensemble imbriqué des répertoires. Pour exclure un élément de la liste d’éléments, utilisez l’attribut Exclude.

Exclude n’est pas réellement une opération d’élément ; elle ne peut pas être utilisée d’elle-même, mais seulement comme modificateur pour Include.

Pour inclure tous les fichiers .cs ou *.vb à l’exception de Form2

  • Utilisez l’un des attributs Include et Exclude suivants :

    <CSFile Include="*.cs" Exclude="Form2.cs"/>
    

    or

    <VBFile Include="*.vb" Exclude="Form2.vb"/>
    

Pour inclure tous les fichiers .cs ou .vb à l’exception de Form2 et Form3

  • Utilisez l’un des attributs Include et Exclude suivants :

    <CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
    

    or

    <VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
    

Pour inclure tous les fichiers .jpg des sous-répertoires du répertoire Images, à l’exception de ceux du répertoire Version2

  • Utilisez les attributs Include et Exclude suivants :

    <JPGFile
        Include="Images\**\*.jpg"
        Exclude = "Images\**\Version2\*.jpg"/>
    

    Notes

    Vous devez spécifier le chemin d’accès pour les deux attributs. Si vous utilisez un chemin d’accès absolu pour spécifier les emplacements des fichiers dans l’attribut Include, vous devez également utiliser un chemin d’accès absolu dans l’attribut Exclude ; si vous utilisez un chemin d’accès relatif dans l’attribut Include, vous devez également utiliser un chemin d’accès relatif dans l’attribut Exclude.

Exclure et supprimer

Si vous définissez vos propres listes d’éléments, vous devez utiliser Exclude aussi souvent que possible. Il existe un avantage en matière de performances à utiliser Exclude dans la même déclaration que Include, car les éléments qui seraient exclus n’ont pas besoin d’être traités.

Utilisez Remove quand vous disposez d’une liste d’éléments prédéfinie, par exemple dans le cas des listes d’éléments standard comme Compile et Content. Dans ce cas, Exclude n’est pas pris en charge.

Remarque

Si vous utilisez un Kit de développement logiciel (SDK) qui le prend en charge, vous pouvez définir la propriété $(OverrideDefaultCompileItems) sur true, et définir votre propre élément Compile avec Include et, éventuellement, Exclude.

Utiliser des conditions pour exclure un fichier ou un répertoire des entrées d’une build

Si vous souhaitez inclure des éléments, par exemple, dans une version Debug, mais pas dans une version Release, vous pouvez utiliser l’attribut Condition pour spécifier les conditions dans lesquelles inclure l’élément.

Pour inclure le fichier Formula.vb uniquement dans les versions Release

  • Utilisez un attribut Condition semblable à ce qui suit :

    <Compile
        Include="Formula.vb"
        Condition=" '$(Configuration)' == 'Release' " />
    

Exemple

L’exemple de code suivant génère un projet avec l’ensemble des fichiers .cs du répertoire à l’exception du fichier Form2.cs.

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

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

    <ItemGroup>
        <CSFile Include="*.cs" Exclude="Form2.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>