Trabajo con varios proyectos y quiero eliminar de forma recursiva 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 forma de obligar a Visual Studio a olvidar todo lo anterior construcciones).
¿Hay una manera rápida de lograr esto (con un archivo .bat por ejemplo) sin tener que escribir un programa .NET?
visual-studio
visual-studio-2008
batch-file
cmd
MichaelD
fuente
fuente
Respuestas:
Esto depende del shell que prefiera usar.
Si está utilizando el shell cmd en Windows, lo siguiente debería funcionar:
Si está utilizando un shell de tipo bash o zsh (como git bash o babun en Windows o la mayoría de los shells Linux / OS X), esta es una forma mucho más agradable y sucinta de hacer lo que desea:
y esto se puede reducir a una línea con un OR:
Tenga en cuenta que si sus directorios de nombres de archivo contienen espacios o comillas, find enviará esas entradas tal cual, que xargs pueden dividir en múltiples entradas. Si su shell los admite
-print0
y-0
evitará esta deficiencia, los ejemplos anteriores se convertirán en:y:
Si está utilizando Powershell, puede usar esto:
como se ve en la respuesta de Robert H a continuación , solo asegúrate de darle crédito por la respuesta de PowerShell en lugar de mí si eliges votar algo :)
¡Por supuesto, sería prudente ejecutar cualquier comando que elija en un lugar seguro primero para probarlo!
fuente
Encontré este hilo y obtuve bingo. Un poco más de búsqueda apareció en este script de Power Shell:
Pensé en compartir, considerando que no encontré la respuesta cuando estaba buscando aquí.
fuente
gci -include bin,obj -recurse | remove-item -force -recurse
)-WhatIf
bandera se pruebe primero, así que terminé con esto:$foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
(aunque un poco desordenado aquí como una línea :))Esto funcionó para mí:
Basado en esta respuesta en superuser.com
fuente
Solía agregar siempre un nuevo objetivo en mis soluciones para lograr esto.
Y puedes llamarlo desde la línea de comando
Este puede ser su archivo por lotes.
fuente
Escribí un script de PowerShell para hacerlo.
La ventaja es que imprime un resumen de las carpetas eliminadas e ignoradas si especificó que se debe ignorar cualquier jerarquía de subcarpetas.
fuente
$_ -notmatch 'node_modules'
condición a la$FoldersToRemove
definición variableNada me funcionó. Necesitaba eliminar todos los archivos en las carpetas bin y obj para depurar y liberar. Mi solución:
1.Haga clic derecho en el proyecto, descargue, haga clic con el botón derecho nuevamente edite, vaya al final
2.Insertar
3. Guarde, vuelva a cargar el proyecto, haga clic derecho en limpiar y listo.
fuente
Algo así debería hacerlo de una manera bastante elegante, después de un objetivo limpio:
fuente
Para eliminar bin y obj antes de compilar, agregue al archivo del proyecto:
Aquí está el artículo: Cómo eliminar la carpeta bin y / u obj antes de la compilación o implementación
fuente
Muy similar a los scripts de Steve PowerShell. Acabo de agregar TestResults y paquetes, ya que es necesario para la mayoría de los proyectos.
fuente
Eche un vistazo al CleanProject , eliminará carpetas bin, carpetas obj, carpetas TestResults y carpetas Resharper. El código fuente también está disponible.
fuente
desde el uso de Windows PowerShell para eliminar las carpetas obj, bin y ReSharper
muy similar a la respuesta de Robert H con una sintaxis más corta
pegar y ejecutar debajo del script
dir. \ -incluye bin, obj, resharper * -recurse | foreach ($ ) {rd $ _. fullname –Recurse –Force}
fuente
Una forma muy rápida e indolora es utilizar la
rimraf
utilidad npm, instalarla globalmente primero:Y luego el comando desde la raíz del proyecto es bastante simple (que se puede guardar en un archivo de script):
Para optimizar el efecto deseado, puede aprovechar los objetivos del evento del proyecto (el que podría usar es
BeforeRebuild
y hacer que ejecute el comando anterior) que se especifican en los documentos: https://docs.microsoft.com/en-us/visualstudio/ msbuild / how-to-extend-the-visual-studio-build-process? view = vs-2017Me gusta la utilidad rimraf, ya que es crossplat y realmente rápida. Pero también puede usar el
RemoveDir
comando en el .csproj si decide ir con la opción de evento de destino. ElRemoveDir
enfoque fue bien explicado en otra respuesta aquí por @Shaman: https://stackoverflow.com/a/22306653/1534753fuente
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 cree que deberían haberse eliminado.
Puede evitar este problema con un simple cambio en su. * Proj agregando esto en algún lugar cerca del final:
Lo que eliminará todo en su carpeta bin de la plataforma / configuración actual.
fuente
Este es mi archivo por lotes que utilizo para eliminar todas las carpetas BIN y OBJ de forma recursiva.
fuente
¿'Limpio' no es lo suficientemente bueno? Tenga en cuenta que puede llamar a msbuild con / t: clean desde la línea de comandos.
fuente
En nuestro servidor de compilación, eliminamos explícitamente los directorios bin y obj, a través de scripts nant.
Cada script de compilación del proyecto es responsable de sus directorios de salida / temp. Funciona muy bien de esa manera. Entonces, cuando cambiamos un proyecto y agregamos uno nuevo, basamos el guión en un guión de trabajo, y usted nota la etapa de eliminación y se encarga de ello.
Si lo hace en su máquina de desarrollo lógico, me quedaría con la limpieza a través de Visual Studio como otros han mencionado.
fuente
De hecho, odio los archivos obj que ensucian los árboles de origen. Por lo general, configuro proyectos para que generen archivos obj fuera del árbol de origen. Para proyectos de C # usualmente uso
Para proyectos en C ++
fuente
http://vsclean.codeplex.com/
fuente
En realidad, podría llevar la sugerencia de PS un poco más lejos y crear un archivo vbs en el directorio del proyecto como este:
Por seguridad, he incluido el parámetro -WhatIf, así que elimínelo si está satisfecho con la lista en la primera ejecución.
fuente
Utilizo una ligera modificación de Robert H que omite errores e imprime los archivos eliminados. Usualmente también borro las carpetas
.vs
,_resharper
ypackage
:También vale la pena señalar es el
git
comando que borra todos los cambios, incluidos los archivos y directorios ignorados:fuente
Tenemos un gran archivo .SLN con muchos archivos de proyecto. Comencé la política de tener un directorio "ViewLocal" donde se encuentran todos los archivos no controlados por la fuente. Dentro de ese directorio hay un directorio 'Inter' y 'Out'. Para los archivos intermedios y los archivos de salida, respectivamente.
Obviamente, esto hace que sea fácil ir a su directorio 'viewlocal' y hacer una simple eliminación, para deshacerse de todo.
Antes de dedicar tiempo a encontrar una manera de solucionar esto con scripts, puede pensar en configurar algo similar.
Sin embargo, no mentiré, mantener esa configuración en una gran organización ha resultado ... interesante. Especialmente cuando utiliza tecnologías como QT que les gusta procesar archivos y crear archivos fuente no controlados por fuente. ¡Pero esa es toda una OTRA historia!
fuente
Teniendo en cuenta que el archivo PS1 está presente en la carpeta actual (la carpeta dentro de la cual necesita eliminar las carpetas bin y obj)
fuente
Para la solución en lote. Estoy usando el siguiente comando:
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"
La razón por la que no se usa
DIR /S /AD /B xxx
1.
DIR /S /AD /B obj
devolverá una lista vacía (al menos en mi Windows10) 2. contendrá el resultado que no se espera (carpeta tobj)DIR /S /AD /B *obj
fuente
@IF EXIST %%G IF %%~aG geq d
se utiliza para verificar la ruta existente y la ruta es una carpeta, no un archivo.Esto funciona bien para mí: comience por / d / r. %% d en (bin, obj, ClientBin, Generated_Code) si @ existe "%% d" rd / s / q "%% d"
fuente
Utilizo el archivo .bat con este comando para hacer eso.
fuente
Creo que puede hacer clic derecho en su solución / proyecto y hacer clic en el botón "Limpiar".
Por lo que recuerdo, estaba funcionando así. No tengo mi VS.NET ahora, así que no puedo probarlo.
fuente