71 votes

Syntaxe MSBuild Task pour la suppression de fichiers

J'essaie d'écrire une tâche MSBuild qui supprime le répertoire Obj et les PDB de mon dossier bin dans mes scripts de production, mais n'arrive pas à la faire fonctionner correctement.

Quelqu'un a-t-il un exemple où cela est fait ou similaire, ou un lien vers un exemple simple de suppression de fichiers et un répertoire avec MSBuild?

124voto

Vous pouvez d’abord effacer les fichiers de ces répertoires puis le répertoire lui-même avec

 <Target Name="SomeTarget">

<ItemGroup>
    <FilesToDelete Include="Path\To\Obj\**\*"/>
</ItemGroup>

<Delete Files="@(FilesToDelete)" />

<RemoveDir Directories="Path\To\Obj\" />
</Target>
 

91voto

Gavin Miller Points 21752

Si vous êtes à la recherche pour supprimer un répertoire entier, vous avez besoin du RemoveDir tâche:

<RemoveDir Directories="Path/To/Obj" />

Et si vous êtes désireux de supprimer les fichiers PDB à partir de la corbeille, vous aurez besoin de la Supprimer de la tâche:

<Delete Files="Path/To/Bin/MyApp.pdb" />

Notez que vous ne pouvez pas utiliser des caractères génériques dans la Suppression de la tâche, donc si vous avez plusieurs fichiers pdb vous êtes obligé de fournir une ItemGroup comme argument.

18voto

Garry English Points 1875

Poster pour d’autres qui auraient pu rencontrer le même problème que moi.

La tâche de suppression ne peut pas supprimer les fichiers en lecture seule, ce que je devais être capable de faire, car lorsque MSBuild obtient la dernière version de TFS, les fichiers sont marqués comme en lecture seule. J'ai utilisé la commande EXEC pour supprimer les fichiers en lecture seule:

 <ItemGroup>
    <FileToDelete Include="c:\temp\fileToDelete.txt"/>
</ItemGroup>
<Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/>
 

5voto

Mark Jerde Points 317

Ce code est tellement laid qu'il doit venir avec un airsickness sac. ;-) Mais il est rapide car il n'a pas de construire une liste de fichiers à supprimer, etc.

<Target Name="DeleteBuildFolder">
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
</Target>

Combien de RmDir commandes sont nécessaires? Assez pour quelques RmDir commandes retourner "Le système ne peut pas trouver le fichier spécifié" au lieu de "Le répertoire n'est pas vide." Sur ma machine, il semble prendre une autre RmDir si $(BuildFolder) est ouvert dans l'Explorateur Windows. Le programme antivirus peut affecter RmDir comme elle fait parfois la Subversion, mais je préfère avoir une couverture de protection AV de (mal)gérer une liste d'exclusion.

4voto

Ole Points 21

Il est également possible de supprimer d’abord la propriété readonly du fichier et d’exécuter la tâche de suppression msbuild.

Ainsi:

 <Target Name="DeleteFiles">
 <Message Text="Delete File" Importance="high"/>
 <Attrib Files="$(FileToDelete)" ReadOnly="false" />
 <Delete Files="$(FileToDelete)" />
</Target>`
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X