Besoin d'un "post clean event" dans Visual Studio

j'ai un projet VS avec un événement post-build avec une commande en ligne de commande qui copie un fichier (.dll) à la cible de bin dir (déboguer ou libérer). Quand je fais un "nettoyage" sur le projet chaque chose est nettoyée, mais ce dossier reste. Y a-t-il un moyen d'afficher les événements post-clean pour que je puisse supprimer ce fichier aussi?

15
demandé sur Skagen 2011-02-24 12:23:29

6 réponses

vous pouvez éditer le fichier projet directement et ajouter la cible à la fin du fichier. BeforeClean et AfterClean sont des cibles comme expliqué ici:

http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx

vous devriez être en mesure de mettre une tâche de suppression dans la cible.

EDIT Vient de tester cela (droit-cliquez sur le projet - > décharger -> droit - > éditer) et la cible suivante est ce que vous besoin de:

<Target Name="AfterClean">
    <Delete Files="$(TargetDir)\*.txt" />
</Target>

Cela fonctionne lorsque vous nettoyez le projet, mais pas la solution, il fonctionne, mais pas à 100%.

15
répondu Leom Burke 2011-02-24 09:41:23

j'ai trouvé que la réponse de Leom Burke en utilisant "Supprimer des fichiers" ne fonctionne pas avec les caractères génériques et ne vous dit pas que quelque chose a mal tourné. Voici ce que j'ai fait à la place -

<Target Name="BeforeClean">
        <Message Text="Cleaning other files..."/>
        <Exec Command="del $(ProjectDir)css\*.* /F /Q"/>
        <Exec Command="del $(ProjectDir)images\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)js\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)usercontrols\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)MasterPages\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)App_Data\TEMP\*.* /F /Q /S" />
        <Exec Command="del $(ProjectDir)App_Data\Logs\*.* /F /Q /S" />
    </Target>

j'ai écrit ce qui précède pour supprimer des fichiers dans une solution umbraco de sorte que lorsque je fais une différence avec ce qui est dans le contrôle source, il ne confond pas la morve hors de moi.

9
répondu Frank Tzanabetis 2013-10-17 06:13:39

je sais que c'est un sujet ancien mais vous pouvez faire des caractères génériques en utilisant la fonction Supprimer intégrée.

<Target Name="AfterClean">
    <ItemGroup>
        <FilesToDelete Include="$(TargetDir)\*.txt"/>
    </ItemGroup>
    <Delete Files="@(FilesToDelete)" />
</Target>
7
répondu Davesmall28 2014-10-01 08:00:15

Vous pouvez mettre à jour le fichier csproj pour spécifier une nouvelle cible. Vous devrez le faire dans un éditeur de texte.

jetez un coup d'oeil à la documentation ici : comment: étendre le processus de construction de Visual Studio.

vous devrez surtout changer le <Target name='AfterClean'>

1
répondu Steve B 2011-02-24 09:33:32

je pense que quelque chose change avec Visual Studio 2017.

fonctionne avec tag: AfterTargets= "Clean"

<Target Name="AfterClean" AfterTargets="Clean">
     <!-- Remove bin folder -->
     <RemoveDir Directories="$(TargetDir)" />
     <!-- Remove obj folder -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" />  
</Target>
0
répondu scrat789 2017-11-23 10:31:33

astuce Chapeau à @scrat789 concernant objectifs secondaires.

Pour VS 2017, v15.6.0 Preview 2.0, j'ai fini par le suivant:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <Message Text="Deleting wwwroot\dist files" Importance="high" />
    <Delete Files="$(ProjectDir)\wwwroot\dist\*.*" ContinueOnError="true" />
  </Target>

peu de choses:

  • notez que j'utilise un nom de cible unique, MyDistClean. En précisant le nom, AfterClean ne fonctionne pas.
  • il n'était pas nécessaire de recharger le csproj après l'avoir édité pour exécuter/tester la tâche propre.
  • Message l'importance est définie pour éviter de changer le niveau de verbosité MSBuild mentionné ici à SO: la cible AfterClean N'est pas invoquée quand je nettoie le projet
  • MyDistClean la tâche a été traitée à la fois à la solution et à la portée du projet.

Voici la tâche améliorée pour oblitérer le répertoire dist de webpack sur Clean:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <ItemGroup>
      <DistDir Include="$(ProjectDir)wwwroot\dist" />
    </ItemGroup>
    <Message Text="Deleting @(DistDir)" Importance="high" />
    <RemoveDir Directories="@(DistDir)" />
  </Target>
0
répondu bvj 2018-01-25 04:44:34