127 votes

Comment nettoyer complètement les dossiers bin et obj dans Visual Studio ?

Si vous faites un clic droit sur un dossier, vous verrez apparaître un élément de menu "Nettoyer". J'ai supposé que cela nettoierait (supprimerait) le répertoire obj et bin. Cependant, pour autant que je puisse voir, cela ne fait rien. Existe-t-il un autre moyen ? (Ne me dites pas d'utiliser l'Explorateur Windows ou cmd.exe). J'aimerais supprimer le répertoire obj et bin afin de pouvoir facilement zipper le tout.

0 votes

S'il est construit par CMake (CMakeLists.txt), il peut aussi y avoir un fichier 'CMakeSettings.json'. Pour moi, il s'agit d'un niveau supérieur à celui du fichier "CMakeSettings.json". vcpkg sous-répertoire d'installation. Ce fichier ne faisait pas partie du .gitignore du projet et était donc source de confusion pour l'équipe de Ruben. git clean ... méthode.

134voto

Newtopian Points 3335

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

Si vous avez des personnalisations dans votre projet MSBuild, cela pourrait causer des problèmes et laisser derrière vous des choses que vous pensez avoir été supprimées.

Vous pouvez contourner ce problème par une simple modification de votre .*proj en ajoutant ceci quelque part vers la fin :

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

Ce qui supprimera tout ce qui se trouve dans votre dossier bin de la plateforme/configuration actuelle.

------ Edit Légère évolution basée sur Réponse du chaman ci-dessous (partagez les votes et donnez-lui en aussi)

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

---- Editer à nouveau avec des parties de xDisruptor mais j'ai supprimé la suppression du .vs car cela serait mieux servi dans un .gitignore (ou équivalent).

Mis à jour pour VS 2015.

<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
     <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
</Target>

Il fournit également une bonne suggestion pour faciliter le déploiement et la maintenance de cette tâche si vous avez plusieurs projets dans lesquels la pousser.

Si vous votez pour cette réponse, assurez-vous de voter également pour les deux autres.

73voto

Ruben Bartelink Points 23945

Si vous utilisez git et que vous avez un fichier .gitignore dans votre projet, vous pouvez

git clean -xdf --dry-run

pour supprimer absolument tous les fichiers sur le .gitignore c'est-à-dire qu'il nettoiera obj y bin dossiers (le x déclenche ce comportement)


Note : Le paramètre --dry-run ne fera que simuler l'opération ("Would remove ...") et vous montrera ce que git serait supprimer. Essayez-le avec une marche à vide, puis supprimez le paramètre et il supprimera vraiment les fichiers et les dossiers.

En option, après cette commande de nettoyage, vous pouvez utiliser dotnet restore mySolution.sln pour que tous les paquets NUGET soient restaurés. Et si vous avez une console de développement ouverte de toute façon,
vous pouvez rapidement exécuter msbuild -m mySolution.sln après (sans avoir Visual Studio ouvert) pour voir si l'opération a réussi.

51voto

xDisruptor Points 149

Pour Visual Studio 2015, les variables MSBuild ont un peu changé :

  <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
         <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
         <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs -->
         <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
  </Target>

Notez que cet extrait supprime également le dossier .vs du répertoire racine de votre solution. Vous pouvez commenter la ligne associée si vous pensez que la suppression du dossier .vs est un excès. Je l'ai activé parce que j'ai remarqué que dans certains projets tiers, cela cause des problèmes lorsque des fichiers tels que application.config existent dans le dossier .vs.

Addendum :

Si vous souhaitez optimiser la maintenabilité de vos solutions, vous pouvez aller plus loin et placer l'extrait ci-dessus dans un fichier séparé, comme suit :

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
       <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 -->
            <RemoveDir Directories="$(TargetDir)" /> <!-- bin -->
            <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs -->
            <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj -->
       </Target>
  </Project>

Puis, incluez ce fichier à la toute fin de chacun de vos fichiers *.csproj, comme suit :

     [...]
     <Import Project="..\..\Tools\ExtraCleanup.targets"/>
  </Project>

Ainsi, vous pouvez enrichir ou affiner votre logique de nettoyage supplémentaire de manière centralisée, à un seul endroit, sans avoir à modifier manuellement chaque fichier *.csproj à chaque fois que vous souhaitez apporter une amélioration.

40voto

Shaman Points 643

Pour supprimer bin et obj avant la construction, ajoutez-les 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 le dossier bin et/ou obj avant la construction ou le déploiement ?

3 votes

J'aime aussi l'idée de supprimer les intermédiaires, mais il y a des effets secondaires importants à s'accrocher à BeforeBuild, car cela effacera toutes les possibilités d'effectuer des constructions incrémentales. Dans les projets qui prennent beaucoup de temps à construire, c'est un coup d'arrêt. De plus, en effaçant le répertoire de sortie de base, vous risquez d'interférer avec des outils qui pourraient vouloir effectuer des constructions multi-cibles/configurations et cumuler les résultats avant de les empaqueter pour le déploiement, ici seule la dernière construction effectuée survivra.

25voto

Aran Mulholland Points 10355

Ce site : https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ utilise les commandes powershell de William Kempf pour supprimer tous les dossiers bin et obj du répertoire courant et des sous-répertoires. Il devrait être possible de l'exécuter à partir de la racine du disque.

Voici la version de William

 gci -inc bin,obj -rec | rm -rec -force

Selon les propres mots de William :

Cela efface tous les répertoires "bin" et "obj" de l'arborescence actuelle. courant et tous les sous-répertoires. Super utile à exécuter dans votre répertoire répertoire d'espace de travail pour obtenir un état "propre", surtout quand quelqu'un quelqu'un se trompe et qu'il y a quelque chose qu'un Clean ou Rebuild dans l'IDE n'a pas détecté.

Pour ceux qui lisent et qui ne le savent peut-être pas, PowerShell supporte alias de commande, le voici réécrit sans utiliser les alias.

Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force

NOTE : Vous devez stocker ces informations dans un fichier PowerShell et placer ce fichier à la racine de votre solution. placer ce fichier à la racine de votre solution (là où se trouve le fichier .sln). ensuite l'exécuter quand vous voulez un nettoyage correct (pas le nettoyage à la souris que VisualStudio le fait, et rapporte également le succès).

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