Quiero eliminar todas las carpetas bin y obj para forzar a todos los proyectos a reconstruir todo


Trabajo con varios proyectos y quiero eliminar recursivamente todas las carpetas con el nombre 'bin' u 'obj'. De esa manera, estoy seguro de que todos los proyectos reconstruirán todo (a veces es la única manera de forzar a visual studio a olvidarse de las compilaciones anteriores).

¿Hay una forma rápida de lograr esto (con un archivo bat, por ejemplo) sin tener que escribir un programa. net?

Author: Svante, 2009-04-16

21 answers

Esto depende del shell que prefieras usar.

Si está utilizando el shell cmd en Windows, entonces lo siguiente debería funcionar:

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 está utilizando un shell de tipo bash o zsh (como git bash o babun en Windows o la mayoría de los shells de Linux / OS X), esta es una forma mucho más agradable y sucinta de hacer lo que desea:

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

Y esto se puede reducir a una línea con un OR:

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

Si está utilizando Powershell, puede usar esto:

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

Como se ve en La respuesta de Robert H a continuación - solo asegúrese de darle crédito por la respuesta de powershell en lugar de a mí si elige votar a favor de cualquier cosa:)

Por supuesto, sería prudente ejecutar cualquier comando que elija en un lugar seguro primero para probarlo!

 273
Author: Steve Willcock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 09:59:14

Encontré este hilo y obtuve bingo. Un poco más de búsqueda apareció este script de shell de energía:

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

Pensé en compartir, teniendo en cuenta que no encontré la respuesta cuando estaba buscando aquí.

 172
Author: Robert H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-13 16:40:01

Esto funcionó para mí:

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

Basado en esta respuesta en superuser.com

 61
Author: Daniel Rehner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-20 10:18:27

Suelo agregar siempre un nuevo objetivo en mis soluciones para lograr esto.

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

Y se puede llamar desde la línea de comandos

msbuild /t:clean_folders

Este puede ser su archivo por lotes.

msbuild /t:clean_folders
PAUSE
 27
Author: Jhonny D. Cano -Leftware-,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-29 00:04:44

Escribí un script de powershell para hacerlo.

La ventaja es que imprime un resumen de las carpetas eliminadas y las ignoradas si especificó cualquier jerarquía de subcarpetas que se ignorará.

Ejemplo de salida

 21
Author: doblak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-03 11:42:35

Nada funcionó para mí. Necesitaba eliminar todos los archivos en las carpetas bin y obj para depurar y liberar. Mi solución:

1.Haga clic derecho en proyecto, descargar, haga clic derecho de nuevo editar, ir a la parte inferior

2.Insértese

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

3. Guardar, recargar proyecto, haga clic derecho en limpiar y listo.

 15
Author: Kdefthog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-05 13:00:25

Algo así debería hacerlo de una manera bastante elegante, después de clean target:

<Target Name="RemoveObjAndBin" AfterTargets="Clean">
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <RemoveDir Directories="$(TargetDir)" />
</Target>
 11
Author: vezenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-14 09:32:03

Para eliminar bin y obj antes de construir añadir al archivo de proyecto:

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

Aquí está el artículo: Cómo eliminar la carpeta bin y/o obj antes de compilar o implementar

 6
Author: Shaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-10 17:07:56

Eche un vistazo al CleanProject, eliminará carpetas bin, carpetas obj, carpetas TestResults y carpetas Resharper. El código fuente también está disponible.

 3
Author: habakuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-06 12:37:01

¿'limpio' no es lo suficientemente bueno? Tenga en cuenta que puede llamar a msbuild con /t:clean desde la línea de comandos.

 2
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 09:39:21

Desde Usando Windows PowerShell para eliminar las carpetas obj, bin y ReSharper

Muy similar a Respuesta de Robert H con sintaxis más corta

  1. ejecute powershell
  2. cd (cambiar dir) a raíz de la carpeta de su proyecto
  3. Pegar y ejecutar debajo de script

    Dir .\ - include bin, obj, resharper* -recurse | foreach (rd) {rd__.fullname-Recurse-Force}

 2
Author: Iman Abidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:42

Aquí está la respuesta que le di a una pregunta similar, Simple, fácil, funciona bastante bien y no requiere nada más que lo que ya tiene con Visual Studio.

Como otros ya han respondido, Clean eliminará todos los artefactos generados por la compilación. Pero dejará atrás todo lo demás.

Si tiene algunas personalizaciones en su proyecto de MSBuild, esto podría significar problemas y dejar cosas que pensaría que debería tener eliminar.

Puede evitar este problema con un simple cambio en su .* proj agregando esto en algún lugar cerca del final:

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

Que eliminará todo en su carpeta bin de la plataforma/configuración actual.

 2
Author: Newtopian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:42

Muy similar a los scripts PowerShell de Steve. Acabo de añadir Resultados y paquetes a medida que es necesario para la mayoría de los proyectos.

Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
 2
Author: Aboo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-13 11:33:25

En nuestro servidor de compilación, eliminamos explícitamente los directorios bin y obj, a través de scripts nant.

Cada script de construcción del proyecto es responsable de sus directorios output/temp. Funciona muy bien de esa manera. Así que cuando cambiamos un proyecto y agregamos uno nuevo, basamos el script en un script de trabajo, y te das cuenta de la etapa de eliminación y te encargas de ello.

Si lo haces en tu máquina de desarrollo lógico, me quedaría limpio a través de Visual Studio como otros han mencionado.

 1
Author: Simeon Pilgrim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 10:16:50

Http://vsclean.codeplex.com/

Herramienta de línea de comandos que encuentra Visual Studio solutions y ejecuta la Limpieza orden sobre ellos. Esto le permite limpiar subir los directorios / bin / * de todos aquellos viejos proyectos que tienes por ahí su disco duro

 1
Author: Joel Martinez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-23 15:39:26

En realidad podría llevar la sugerencia de PS un poco más allá y crear un archivo vbs en el directorio del proyecto como este:

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

Por seguridad, he incluido el parámetro-WhatIf, así que elimínelo si está satisfecho con la lista en la primera ejecución.

 1
Author: KL XL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-30 19:52:30

Realmente odio los archivos obj que ensucian los árboles de origen. Por lo general, configuro proyectos para que generen archivos obj fuera del árbol de fuentes. Para proyectos en C# normalmente uso

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

Para proyectos C++

 IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
 0
Author: Juozas Kontvainis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 12:56:04

Tenemos un grande .Archivos SLN con muchos archivos de proyecto. Comencé la política de tener un directorio "ViewLocal" donde se encuentran todos los archivos no controlados por sourcecontroled. Dentro de ese directorio hay un directorio' Inter 'y un directorio' Out'. Para los archivos intermedios y los archivos de salida, respectivamente.

Esto obviamente hace que sea fácil ir a su directorio 'viewlocal' y hacer una simple eliminación, para deshacerse de todo.

Antes de pasar el tiempo buscando una manera de solucionar esto con los scripts, podrías pensar en configurar algo similar.

No voy a mentir, sin embargo, el mantenimiento de una configuración de este tipo en una gran organización ha demostrado....Interesante.... Especialmente cuando utiliza tecnologías como QT que les gusta procesar archivos y crear archivos de origen no controlados por fuentes. ¡Pero eso es otra historia!

 0
Author: pj4533,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 13:20:59

Teniendo en cuenta que el archivo PS1 está presente en la carpeta currentFolder (la carpeta dentro de la cual necesita eliminar las carpetas bin y obj)

$currentPath = $MyInvocation.MyCommand.Path
$currentFolder = Split-Path $currentPath

Get-ChildItem $currentFolder -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
 0
Author: ShivanandSK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-16 13:04:14

Este es mi archivo por lotes que uso para eliminar todas las carpetas BIN y OBJ recursivamente.

  1. Crea un archivo vacío y nómbralo DeleteBinObjFolders.mtd
  2. Copie y pegue el siguiente código en las carpetas Deletebinobj.mtd
  3. Mueve las carpetas Deletebinobj.bat archivo en la misma carpeta con su solución (*.sln) file.
@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
Author: Alper Ebicoglu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-19 06:57:56

Creo que puede hacer clic derecho en su solución/proyecto y haga clic en el botón "Limpiar".

Por lo que recuerdo, funcionaba así. No tengo mi VS.NET conmigo ahora no puedo probarlo.

 -1
Author: dr. evil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-16 09:40:20