Je veux supprimer tous les dossiers bin et obj pour forcer tous les projets à tout reconstruire

Je travaille avec plusieurs projets et je veux supprimer récursivement tous les dossiers portant le nom “bin” ou “obj”. De cette façon, je suis sûr que tous les projets reconstruiront tout (parfois, c’est le seul moyen de forcer Visual Studio à oublier les versions précédentes).

Existe-t-il un moyen rapide d’y parvenir (avec un fichier de chauve-souris par exemple) sans avoir à écrire un programme .net?

Cela dépend du shell que vous préférez utiliser.

Si vous utilisez le shell cmd sous Windows, les éléments suivants devraient fonctionner:

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G" FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G" 

Si vous utilisez un shell de type bash ou zsh (tel que git bash ou babun sous Windows ou la plupart des shells Linux / OS X), il s’agit là d’une méthode beaucoup plus agréable et plus succincte:

 find . -iname "bin" | xargs rm -rf find . -iname "obj" | xargs rm -rf 

et cela peut être réduit à une ligne avec un OU:

 find . -iname "bin" -o -iname "obj" | xargs rm -rf 

Si vous utilisez Powershell, vous pouvez utiliser ceci:

 Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

comme on le voit dans la réponse de Robert H ci – dessous – assurez-vous simplement de lui donner le crédit de la réponse à PowerShell plutôt que de moi si vous choisissez de voter quelque chose 🙂

Il serait bien sûr sage de lancer la commande de votre choix dans un endroit sûr avant de la tester!

J’ai trouvé ce fil et obtenu le bingo. Un peu plus de recherche a permis de trouver ce script shell de puissance:

 Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

J’ai pensé que je partagerais, considérant que je n’ai pas trouvé la réponse quand je regardais ici.

Cela a fonctionné pour moi:

 for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d" 

Basé sur cette réponse sur superuser.com

J’ai l’habitude d’append toujours une nouvelle cible sur mes solutions pour y parvenir.

       

Et vous pouvez l’appeler en ligne de commande

 msbuild /t:clean_folders 

Cela peut être votre fichier batch.

 msbuild /t:clean_folders PAUSE 

J’ai écrit un script PowerShell pour le faire.

L’avantage est qu’il affiche un résumé des dossiers supprimés et des dossiers ignorés si vous avez spécifié une hiérarchie de sous-dossiers à ignorer.

Exemple de sortie

Rien n’a fonctionné pour moi. Je devais supprimer tous les fichiers des dossiers bin et obj pour le débogage et la publication. Ma solution:

1. Cliquez droit sur le projet, déchargez, cliquez à nouveau avec le bouton droit de la souris, modifiez, allez au bas

2.Insert

      

3. Enregistrez, rechargez le projet, cliquez avec le bouton droit de la souris sur clean et presto.

Quelque chose comme ça devrait le faire d’une manière élégante, après une cible bien définie:

     

Pour supprimer bin et obj avant la construction, ajoutez au fichier de projet:

       

Voici l’article: Comment supprimer les dossiers bin et / ou obj avant la génération ou le déploiement

Jetez un oeil à CleanProject , il va supprimer les dossiers bin, les dossiers obj, les dossiers TestResults et les dossiers Resharper. Le code source est également disponible.

Est-ce que «propre» n’est pas suffisant? Notez que vous pouvez appeler msbuild avec / t: nettoyer depuis la ligne de commande.

à partir de Windows PowerShell pour supprimer les dossiers obj, bin et ReSharper

très similaire à la réponse de Robert H avec une syntaxe plus courte

  1. exécuter Powershell
  2. cd (change dir) à la racine de votre dossier de projet
  3. coller et exécuter sous le script

    dir. \ -include bin, obj, resharper * -recurse | foreach ($ ) {rd $ _. fullname –Recurse –Force}

Voici la réponse que j’ai donnée à une question similaire, simple, facile, fonctionne très bien et ne nécessite rien d’autre que ce que vous avez déjà avec Visual Studio.

Comme d’autres ont déjà répondu, Clean supprimera tous les artefacts générés par la construction. Mais cela laissera derrière tout le rest.

Si vous avez des personnalisations dans votre projet MSBuild, cela pourrait poser problème et laisser des éléments que vous penseriez avoir supprimés.

Vous pouvez contourner ce problème par une simple modification de votre fichier. * En l’ajoutant quelque part vers la fin:

    

Qui supprimera tout dans votre dossier bin de la plate-forme / configuration actuelle.

Très similaire aux scripts PowerShell de Steve. Je viens d’y append TestResults et les packages, car ils sont nécessaires pour la plupart des projets.

 Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

Sur notre serveur de compilation, nous supprimons explicitement les répertoires bin et obj, via des scripts nant.

Chaque script de construction de projet est responsable de ses répertoires de sortie / temp. Fonctionne bien comme ça. Donc, quand nous changeons un projet et en ajoutons un nouveau, nous basons le script sur un script de travail et vous notez l’étape de suppression et vous en occupez.

Si vous le faites sur votre machine de développement logique, je m’en tiendrai à nettoyer via Visual Studio, comme d’autres l’ont mentionné.

http://vsclean.codeplex.com/

Outil de ligne de commande qui trouve des solutions Visual Studio et exécute la commande Clean sur eux. Cela vous permet de nettoyer les répertoires / bin / * de tous les anciens projets qui traînent sur votre disque dur

Vous pourriez en fait prendre la suggestion de PS un peu plus loin et créer un fichier vbs dans le répertoire du projet comme ceci:

 Option Explicit Dim oShell, appCmd Set oShell = CreateObject("WScript.Shell") appCmd = "powershell -noexit Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -WhatIf }" oShell.Run appCmd, 4, false 

Pour des raisons de sécurité, j’ai inclus le paramètre -WhatIf, alors supprimez-le si vous êtes satisfait de la liste lors de la première exécution.

Je déteste réellement les fichiers obj qui jonchent les arbres sources. J’ai l’habitude de configurer des projets afin qu’ils produisent des fichiers obj en dehors de l’arborescence source. Pour les projets C #, j’utilise habituellement

  ..\..\obj\$(AssemblyName)\$(Configuration)\ 

Pour les projets C ++

  IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)" 

Nous avons un gros fichier .SLN avec de nombreux fichiers de projet. J’ai commencé à avoir un répertoire “ViewLocal” dans lequel se trouvent tous les fichiers non contrôlés. Dans ce répertoire se trouve un répertoire «Inter» et un répertoire «Out». Pour les fichiers intermédiaires et les fichiers de sortie, respectivement.

Cela rend évidemment facile de simplement aller dans votre répertoire “viewlocal” et de faire une simple suppression, pour se débarrasser de tout.

Avant de passer du temps à trouver un moyen de contourner ce problème avec des scripts, vous pourriez penser à créer quelque chose de similaire.

Je ne mentirai pas cependant, le maintien d’une telle configuration dans une grande organisation s’est avéré … intéressant. Surtout lorsque vous utilisez des technologies telles que QT qui traitent des fichiers et créent des fichiers sources non contrôlés par des sources externes. Mais c’est toute une histoire!

Considérant que le fichier PS1 est présent dans le currentFolder (le dossier dans lequel vous devez supprimer les dossiers bin et obj)

 $currentPath = $MyInvocation.MyCommand.Path $currentFolder = Split-Path $currentPath Get-ChildItem $currentFolder -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

Ceci est mon fichier de commandes que j’utilise pour supprimer tous les dossiers BIN et OBJ de manière récursive.

  1. Créez un fichier vide et nommez-le DeleteBinObjFolders.bat
  2. Copier-coller le code ci-dessous dans le fichier DeleteBinObjFolders.bat
  3. Déplacez le fichier DeleteBinObjFolders.bat dans le même dossier que votre fichier de solution (* .sln).
 @echo off @echo Deleting all BIN and OBJ folders... for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d" @echo BIN and OBJ folders successfully deleted :) Close the window. pause > nul 

Je pense que vous pouvez faire un clic droit sur votre solution / projet et cliquer sur le bouton “Nettoyer”.

Pour autant que je me souvienne, cela fonctionnait comme ça. Je n’ai plus mon VS.NET avec moi, donc je ne peux pas le tester.