Partager via


Delete (tâche)

Supprime les fichiers spécifiés.

Paramètres

Le tableau ci-dessous décrit les paramètres de la tâche Delete .

Paramètre Description
DeletedFiles Paramètre de sortie ITaskItem[] facultatif.

Spécifie les fichiers qui ont été supprimés.
Files Paramètre ITaskItem[] obligatoire.

Spécifie les fichiers à supprimer.
TreatErrorsAsWarnings Paramètre Boolean facultatif.

Si true, les erreurs sont consignées en tant qu’avertissements. La valeur par défaut est false.

Notes

En plus des paramètres énumérés ci-dessus, cette tâche hérite des paramètres de la classe TaskExtension , qui elle-même hérite de la classe Task . Pour obtenir la liste de ces paramètres supplémentaires et leurs descriptions, consultez Classe de base TaskExtension.

Avertissement

Soyez prudent lorsque vous utilisez des caractères génériques avec la tâche Delete. Vous pouvez facilement supprimer les mauvais fichiers avec des expressions comme $(SomeProperty)\**\*.* ou $(SomeProperty)/**/*.*, en particulier si la propriété prend la valeur d’une chaîne vide, auquel cas le paramètre Files peut prendre la valeur de la racine de votre lecteur et supprimer beaucoup plus que vous ne le souhaitez.

Exemples

L’exemple suivant supprime le fichier ConsoleApp1.pdb lorsque vous générez la cible DeleteDebugSymbolFile.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

    <PropertyGroup>
        <AppName>ConsoleApp1</AppName>
    </PropertyGroup>

    <Target Name="DeleteDebugSymbolFile">
        <Message Text="Deleting $(OutDir)$(AppName).pdb"/>
        <Delete Files="$(OutDir)$(AppName).pdb" />
    </Target>
  
</Project>

Si vous devez suivre les fichiers supprimés, définissez TaskParameter à DeletedFiles avec le nom de l’élément, comme suit :

      <Target Name="DeleteDebugSymbolFile">
        <Delete Files="$(OutDir)$(AppName).pdb" >
              <Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
        </Delete>
        <Message Text="Deleted files: '@(DeletedList)'"/>
    </Target>

Au lieu d’utiliser directement des caractères génériques dans la tâche Delete, créez un fichier ItemGroup à supprimer et exécuter la tâche Delete sur cette tâche. Mais veillez à bien placer le ItemGroup. Si vous placez un ItemGroup au niveau supérieur dans un fichier de projet, il est évalué tôt, avant le démarrage de la build, de sorte qu’il n’inclura pas les fichiers qui ont été générés dans le cadre du processus de génération. Ainsi, placez le ItemGroup qui crée la liste des éléments à supprimer dans une cible proche de la tâche Delete. Vous pouvez également spécifier une condition pour vérifier que la propriété n’est pas vide, de sorte que vous ne créerez pas de liste d’éléments avec un chemin d’accès qui commence à la racine du lecteur.

Dans l’exemple suivant, tous les fichiers avec l’extension .orig dans un dossier particulier sont supprimés.

<Project>
  <Target Name="DeleteFiles" AfterTargets="Build">
     <ItemGroup>
       <FilesToDelete Include="source\*.orig"/>
     </ItemGroup>
     <Message Text="Deleting Files @(FilesToDelete)"/>
     <Delete Files="@(FilesToDelete)">
       <Output 
          TaskParameter="DeletedFiles"
          ItemName="FilesDeleted"/>
     </Delete>
     <Message Text="Files deleted: @(FilesDeleted)"/>
  </Target>
</Project>

Notes

Lors de l’utilisation de caractères génériques pour la suppression de fichiers générés pendant le processus de génération, sachez à quel moment du processus de génération l’expansion du caractère générique se produit. Dans l’exemple précédent, l’expansion du caractère générique ItemGroup se trouve dans la même cible que la suppression, ce qui garantit que tout fichier généré avant cette cible est inclus dans la liste de suppression. Les groupes d’éléments au niveau supérieur sont développés au moment de l’évaluation, ce qui laisserait de côté les fichiers générés plus tard dans le processus de génération.

La tâche Delete est destinée à supprimer des fichiers. Si vous souhaitez supprimer un répertoire, utilisez RemoveDir.

La tâche Delete ne fournit pas d’option pour supprimer les fichiers en lecture seule. Pour supprimer des fichiers en lecture seule, vous pouvez utiliser la tâche Exec pour exécuter la commande del ou l’équivalent, avec l’option appropriée pour activer la suppression de fichiers en lecture seule. Vous devez prêter attention à la longueur de la liste d’éléments d’entrée, puisqu’il existe une limitation de longueur sur la ligne de commande, et vous assurer de gérer les noms de fichiers avec des espaces, comme dans cet exemple :

<Target Name="DeleteReadOnly">
  <ItemGroup>
    <FileToDelete Include="read only file.txt"/>
  </ItemGroup>
  <Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/>
</Target>

En général, lors de l’écriture de scripts de build, déterminez si votre suppression fait logiquement partie d’une opération Clean. Si vous devez définir certains fichiers à nettoyer dans le cadre d’une opération normale Clean, vous pouvez les ajouter à la liste @(FileWrites) et ils seront supprimés à l’étape suivante Clean. Si un traitement plus personnalisé est nécessaire, définissez une cible et spécifiez son exécution en définissant l’attribut BeforeTargets="Clean" ou AfterTargets="Clean", ou définissez votre version personnalisée des cibles BeforeClean ou AfterClean. Consultez Personnaliser votre build.

Voir aussi