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?
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%.
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.
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>
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'>
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>
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>