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
etExclude
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
etExclude
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
etExclude
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’attributExclude
; si vous utilisez un chemin d’accès relatif dans l’attributInclude
, vous devez également utiliser un chemin d’accès relatif dans l’attributExclude
.
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>