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 avec le nom 'bin' ou 'obj'. De cette façon, je suis sûr que tous les projets vont reconstruire everything (parfois c'est le seul moyen de forcer visual studio à tout oublier des constructions précédentes).

y a-t-il un moyen rapide d'accomplir ceci (avec un fichier bat par exemple) sans avoir à écrire un programme .net?

178
demandé sur Svante 2009-04-16 13:37:50

21 réponses

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

si vous utilisez l'interpréteur de commandes cmd sur Windows, alors la commande suivante devrait 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 (comme git bash ou babun sous Windows ou la plupart des shell Linux / OS X), alors c'est une façon plus agréable, plus succincte de faire ce que vous voulez:

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

et celui-ci peut être réduit à une ligne avec un ou:

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

si vous utilisez Powershell alors vous pouvez utiliser ceci:

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

comme on le voit dans Robert H, dans la réponse ci-dessous - assurez-vous de lui donner le crédit pour la powershell de répondre plutôt que de me si vous choisissez à voter n'importe quoi :)

Il serait sage d'exécuter n'importe quelle commande que vous choisissez un endroit sûr premier à le tester!

273
répondu Steve Willcock 2017-12-19 09:59:14

j'ai trouvé ce fil et j'ai eu bingo. Un peu plus de recherche a trouvé 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 cherchais ici.

172
répondu Robert H. 2013-05-13 16:40:01

cela a fonctionné pour moi:

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

sur la base de cette réponse le superuser.com

61
répondu Daniel Rehner 2017-03-20 10:18:27

j'ai l'habitude d'ajouter toujours un nouvel objectif sur mes solutions pour atteindre cet objectif.

<Target Name="clean_folders">
  <RemoveDir Directories=".\ProjectName\bin" />
  <RemoveDir Directories=".\ProjectName\obj" />
  <RemoveDir Directories="$(ProjectVarName)\bin" />
  <RemoveDir Directories="$(ProjectVarName)\obj" />
</Target>

et vous pouvez l'appeler depuis la ligne de commande

msbuild /t:clean_folders

ce peut être votre fichier batch.

msbuild /t:clean_folders
PAUSE
27
répondu Jhonny D. Cano -Leftware- 2016-12-29 00:04:44

j'ai écrit un script powershell pour le faire.

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

Output example

21
répondu doblak 2013-08-03 11:42:35

rien ne marchait pour moi. J'avais besoin de supprimer tous les fichiers dans les dossiers bin et obj pour le débogage et la publication. Ma solution:

1.Clic droit projet, décharger, clic droit à nouveau éditer ,aller en bas

2.Ajouter

<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
  <RemoveDir Directories="..\..\Publish" />
  <RemoveDir Directories=".\bin" />
  <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>

3. Enregistrer, recharger le projet, clic droit nettoyer et presto.

15
répondu Kdefthog 2014-11-05 13:00:25

quelque chose comme cela devrait le faire d'une manière assez élégante, après la cible propre:

<Target Name="RemoveObjAndBin" AfterTargets="Clean">
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <RemoveDir Directories="$(TargetDir)" />
</Target>
11
répondu vezenkov 2014-03-14 09:32:03

pour supprimer bin et obj avant de construire ajouter au fichier du projet:

<Target Name="BeforeBuild">
    <!-- Remove obj folder -->
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <!-- Remove bin folder -->
    <RemoveDir Directories="$(BaseOutputPath)" />
</Target>

Voici l'article: comment supprimer bin et/ou dossier obj avant la compilation ou le déploiement

6
répondu Shaman 2014-03-10 17:07:56

regardez le CleanProject , il supprimera les dossiers bin, les dossiers obj, les dossiers TestResults et les dossiers Resharper. Le code source est également disponible.

3
répondu habakuk 2013-02-06 12:37:01

est-ce que "propre" n'est pas suffisant? Notez que vous pouvez appeler msbuild avec /t:clean depuis la ligne de commande.

2
répondu Brian 2009-04-16 09:39:21

de en utilisant Windows PowerShell pour supprimer les dossiers obj, bin et ReSharper

très similaire à Robert H answer avec une syntaxe plus courte

  1. exécuter en powershell
  2. cd (changement de direction) à la racine de votre dossier de projet
  3. collez et exécutez le script ci-dessous

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

2
répondu Iman Abidi 2017-05-23 12:26:42

Voici la réponse j'ai donné à une question similaire, Simple, facile, fonctionne assez bien et ne nécessite rien d'autre que ce que vous avez déjà avec Visual Studio.

comme d'autres ont répondu déjà propre enlèvera tous les artéfacts qui sont générés par la construction. Mais il laissera derrière lui tout le reste.

si vous avez quelques personnalisations dans votre projet MSBuild cela pourrait vous causer des problèmes et laisser derrière vous des trucs que vous pensez qu'il devrait l'avoir supprimé.

Vous pouvez contourner ce problème avec un simple changement de votre .*proj par l'ajout de ce quelque part près de la fin :

<Target Name="SpicNSpan"
        AfterTargets="Clean">
    <RemoveDir Directories="$(OUTDIR)"/>
</Target>

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

2
répondu Newtopian 2017-05-23 12:26:42

très similaire aux scripts PowerShell de Steve. Je viens d'ajouter TestResults et packages à celui-ci car il est nécessaire pour la plupart des projets.

Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
2
répondu Aboo 2017-03-13 11:33:25

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 sa sortie / répertoires temp. Fonctionne très bien de cette façon. Donc quand nous changeons un projet et en ajoutons un nouveau, nous basons le script sur un script qui fonctionne, et vous remarquez l'étape de suppression et vous en occupez.

si vous le faites sur votre machine de développement logique, je m'en tiendrais à nettoyer via Visual Studio comme d'autres l'ont fait mentionner.

1
répondu Simeon Pilgrim 2009-04-16 10:16:50

http://vsclean.codeplex.com/

outil en ligne de commande qui trouve visuel Studio solutions et exécute le programme Clean commande sur eux. Cela vous permet de nettoyer le /bin/* répertoires de tous ceux de vieux projets sur lesquels tu traînes votre disque dur

1
répondu Joel Martinez 2009-06-23 15:39:26

vous pourriez en fait prendre la suggestion 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 la sécurité, j'ai inclus -WhatIf paramètre, donc l'enlever si vous êtes satisfait de la liste sur la première manche.

1
répondu KL XL 2012-03-30 19:52:30

je déteste les fichiers obj qui jonchent les arbres sources. Je configure habituellement des projets de sorte qu'ils sortent des fichiers obj en dehors de l'arbre des sources. Pour les projets C# j'utilise habituellement

 <IntermediateOutputPath>..\..\obj$(AssemblyName)$(Configuration)\</IntermediateOutputPath>

pour les projets C++

 IntermediateDirectory="..\..\obj$(ProjectName)$(ConfigurationName)"
0
répondu Juozas Kontvainis 2009-04-16 12:56:04

nous avons un grand .Fichiers SLN avec de nombreux fichiers de projets. J'ai commencé la Politique d'avoir un répertoire "ViewLocal" où tous les fichiers non contrôlés par sourcesont situés. Dans ce répertoire, il y a un répertoire "Inter" et un répertoire "Out". Par l'intermédiaire de fichiers et les fichiers de sortie, respectivement.

cela rend évidemment facile d'aller dans votre répertoire 'viewlocal' et de faire une simple suppression, pour se débarrasser de tout.

avant que vous passiez du temps trouver une façon de travailler autour de cela avec des scripts, vous pourriez penser à mettre en place quelque chose de similaire.

Je ne vais pas mentir cependant, le maintien d'une telle configuration dans une grande organisation a prouvé....intéressant. Surtout lorsque vous utilisez des technologies telles que QT qui aiment traiter des fichiers et créer des fichiers source non contrôlés par sourcecontrolled. Mais c'est une toute AUTRE histoire!

0
répondu pj4533 2009-04-16 13:20:59

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 }
0
répondu ShivanandSK 2016-05-16 13:04:14

C'est mon fichier batch que j'utilise pour supprimer tous les dossiers BIN et OBJ de façon récursive.

  1. créez un fichier vide et nommez-le DeleteBinObjFolders.MTD
  2. copier-coller le code ci-dessous dans les DeleteBinObjFolders .MTD
  3. déplacer le DeleteBinObjFolders.bat fichier dans le même dossier avec votre solution (*.sln) fichier.
@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
0
répondu Alper Ebicoglu 2018-03-19 06:57:56

je pense que vous pouvez faire un clic droit sur votre solution/projet et cliquez sur le bouton" Nettoyer".

autant que je me souvienne, ça marchait comme ça. Je n'ai pas mon VS.NET avec moi maintenant, donc je ne peux pas le tester.

-1
répondu dr. evil 2009-04-16 09:40:20