Si hace clic derecho en una carpeta, verá un elemento de menú "Limpiar". Supuse que esto limpiaría (eliminaría) el directorio obj y bin. Sin embargo, por lo que puedo ver, no hace nada. ¿Hay otra manera? (por favor, no me diga que vaya al Explorador de Windows o al cmd.exe) Me gustaría eliminar la carpeta obj y bin para poder comprimir todo fácilmente.
visual-studio
msbuild
tom7
fuente
fuente
Respuestas:
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 atrás cosas que pensaría que debería haber eliminado.
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>
Lo que eliminará todo en su carpeta bin de la plataforma / configuración actual.
------ Edite una ligera evolución basada en la respuesta de Shaman a continuación (comparta los votos y dele algunos también)
<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- Remove obj folder --> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <!-- Remove bin folder --> <RemoveDir Directories="$(BaseOutputPath)" /> </Target>
---- Edite de nuevo con partes de xDisruptor pero eliminé la eliminación de .vs ya que esto sería mejor servido en un .gitignore (o equivalente)
Actualizado para 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>
También proporciona una buena sugerencia sobre cómo hacer que la tarea sea más fácil de implementar y mantener si tiene varios proyectos para impulsar esto.
Si vota esta respuesta, asegúrese de votar a ambos también.
fuente
Si está usando git y tiene una corrección
.gitignore
en su proyecto, puedepara eliminar absolutamente todos los archivos de la
.gitignore
lista, es decir, se limpiaránobj
y lasbin
carpetas (lo quex
desencadena este comportamiento)fuente
--dry-run
esto solo le indicará lo que se eliminará. nicePara Visual Studio 2015, las variables de MSBuild han cambiado un poco:
<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>
Tenga en cuenta que este fragmento también borra la carpeta .vs del directorio raíz de su solución. Es posible que desee comentar la línea asociada si cree que eliminar la carpeta .vs es una exageración. Lo tengo habilitado porque noté que en algunos proyectos de terceros causa problemas cuando existen archivos ala application.config dentro de la carpeta .vs.
Apéndice:
Si desea optimizar la capacidad de mantenimiento de sus soluciones, es posible que desee llevar las cosas un paso más allá y colocar el fragmento anterior en un archivo separado como este:
<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>
Y luego incluya este archivo al final de todos y cada uno de sus archivos * .csproj así:
[...] <Import Project="..\..\Tools\ExtraCleanup.targets"/> </Project>
De esta manera, puede enriquecer o ajustar su lógica de limpieza adicional de forma centralizada, en un solo lugar, sin tener que pasar por las molestias de editar manualmente todos y cada uno de los archivos * .csproj cada vez que desee realizar una mejora.
fuente
Para eliminar bin y obj antes de compilar, agregar al archivo del 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 la compilación o implementación
fuente
Este sitio: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ utiliza los comandos powershell de William Kempf para eliminar cualquier carpeta bin y obj del directorio actual y subdirectorios. Debería ser posible ejecutarlo desde la raíz de la unidad.
Aquí está la versión de William
En las propias palabras de William:
fuente
Echa un vistazo al fantástico CleanProject de código abierto de Ron Jacobs. Incluso se encarga de la cremallera si quieres.
Aquí está el enlace de CodePlex
fuente
Puede encontrar y eliminar fácilmente las carpetas bin y obj en Far Manager.
En el cuadro de diálogo de configuración de búsqueda:
Una vez realizada la búsqueda, cambie la vista a "Panel" .
Espero que ayude a alguien.
fuente
En Windows, simplemente abra el explorador, navegue hasta su carpeta SLN, haga clic en el campo de búsqueda y escriba kind: = folder; obj -> para carpetas obj, use CTRL + A y elimínelas, lo mismo para bin Listo
No necesita ninguna herramienta o software adicional;)
fuente
No elimina las carpetas, pero elimina los subproductos de la compilación. ¿Hay alguna razón por la que desee eliminar las carpetas de compilación reales ?
fuente
Clean eliminará todos los archivos intermedios y finales creados por el proceso de compilación, como archivos .obj y archivos .exe o .dll.
Sin embargo, no elimina los directorios donde se crean esos archivos. No veo una razón convincente por la que necesite eliminar los directorios. ¿Puedes explicarme más?
Si miras dentro de estos directorios antes y después de una "limpieza", deberías ver cómo se limpia la salida compilada.
fuente
Todavía no puedo agregar un comentario (no se alcanzó una reputación mínima),
así que dejo esta respuesta para subrayar que:
la acción "BeforeBuild" con
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
es excelente pero, para mí, está en conflicto con un modelo de Entity Framework incluido en el mismo proyecto.El error que recibo es:
Supongo que "edmxResourcesToembed" se crea antes de que se ejecute la acción de destino "BeforeBuild".
fuente
Según la respuesta de Joe, convertí el código VB en C #:
/// <summary> /// Based on code of VSProjCleaner tool (C) 2005 Francesco Balena, Code Archirects /// </summary> static class VisualStudioCleaner { public static void Process(string rootDir) { // Read all the folder names in the specified directory tree string[] dirNames = Directory.GetDirectories(rootDir, "*.*", SearchOption.AllDirectories); List<string> errorsList = new List<string>(); // delete any .suo and csproj.user file foreach (string dir in dirNames) { var files = new List<string>(); files.AddRange(Directory.GetFiles(dir, "*.suo")); files.AddRange(Directory.GetFiles(dir, "*.user")); foreach (string fileName in files) { try { Console.Write("Deleting {0} ...", fileName); File.Delete(fileName); Console.WriteLine("DONE"); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine(" ERROR: {0}", ex.Message); errorsList.Add(fileName + ": " + ex.Message); } } } // Delete all the BIN and OBJ subdirectories foreach (string dir in dirNames) { string dirName = Path.GetFileName(dir).ToLower(); if (dirName == "bin" || dirName == "obj") { try { Console.Write("Deleting {0} ...", dir); Directory.Delete(dir, true); Console.WriteLine("DONE"); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine(" ERROR: {0}", ex.Message); errorsList.Add(dir + ": " + ex.Message); } } } Console.WriteLine(new string('-', 60)); if (errorsList.Count == 0) { Console.WriteLine("All directories and files were removed successfully"); } else { Console.WriteLine("{0} directories or directories couldn't be removed", errorsList.Count); Console.WriteLine(new string('-', 60)); foreach (string msg in errorsList) { Console.WriteLine(msg); } } } }
fuente
Utilizo VisualStudioClean, que es fácil de entender y predecible. Saber cómo funciona y qué archivos va a borrar me alivia.
Anteriormente probé VSClean (tenga en cuenta que VisualStudioClean no es VSClean), VSClean es más avanzado, tiene muchas configuraciones que a veces me hacen preguntarme qué archivos va a eliminar. Una mala configuración resultará en la pérdida de mis códigos fuente. Para probar cómo funcionará la configuración, es necesario hacer una copia de seguridad de todos mis proyectos, lo que lleva muchas veces, así que al final elijo VisualStudioClean.
Conclusión: VisualStudioClean si desea una limpieza básica, VSClean para escenarios más complejos.
fuente
Así es como lo hago con un archivo por lotes para eliminar todas las carpetas BIN y OBJ de forma recursiva.
@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
fuente
Almaceno mis proyectos VS terminados guardando solo el código fuente.
Elimino las carpetas BIN, DEBUG, RELEASE, OBJ, ARM y .vs de todos los proyectos.
Esto reduce considerablemente el tamaño del proyecto. El proyecto
debe reconstruirse cuando se saca del almacenamiento.
fuente
Solo un apéndice a todas las buenas respuestas anteriores en caso de que alguien no se dé cuenta de lo fácil que es en VB / C # automatizar todo el proceso hasta el archivo zip.
Así que solo toma una aplicación de Formularios simple de las plantillas (si aún no tienes una aplicación de limpieza) y le agregas un botón y luego ClickOnce lo instala en tu escritorio sin preocuparte por configuraciones especiales o mucho de nada. Este es todo el código que necesita adjuntar al botón:
Imports System.IO.Compression Private Sub btnArchive_Click(sender As Object, e As EventArgs) Handles btnArchive.Click Dim src As String = "C:\Project" Dim dest As String = Path.Combine("D:\Archive", "Stub" & Now.ToString("yyyyMMddHHmmss") & ".zip") If IsProjectOpen() Then 'You don't want Visual Studio holding a lock on anything while you're deleting folders MsgBox("Close projects first, (expletive deleted)", vbOKOnly) Exit Sub End If If MsgBox("Are you sure you want to delete bin and obj folders?", vbOKCancel) = DialogResult.Cancel Then Exit Sub If ClearBinAndObj(src) Then ZipFile.CreateFromDirectory(src, dest) End Sub Public Function ClearBinAndObj(targetDir As String) As Boolean Dim dirstodelete As New List(Of String) For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "bin") dirstodelete.Add(d) Next For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "obj") dirstodelete.Add(d) Next For Each d In dirstodelete Try Directory.Delete(d, True) Catch ex As Exception If MsgBox("Error: " & ex.Message & " - OK to continue?", vbOKCancel) = MsgBoxResult.Cancel Then Return False End Try Next Return True End Function Public Function IsProjectOpen() For Each clsProcess As Process In Process.GetProcesses() If clsProcess.ProcessName.Equals("devenv") Then Return True Next Return False End Function
Una cosa para recordar es que las eliminaciones del sistema de archivos pueden salir mal fácilmente. Uno de mis favoritos fue cuando me di cuenta de que no podía eliminar una carpeta porque contenía elementos creados por Visual Studio mientras se ejecutaba con privilegios elevados (para poder depurar un servicio).
Necesitaba dar permiso manualmente o, supongo, ejecutar la aplicación también con privilegios elevados. De cualquier manera, creo que es valioso utilizar un enfoque interactivo basado en GUI sobre un script, especialmente porque es probable que esto sea algo que se hace al final de un largo día y no querrá descubrir más tarde que su copia de seguridad en realidad no existe ...
fuente
Actualización: Visual Studio 2019 (Limpiar [bin] y [obj] antes del lanzamiento). Sin embargo, no estoy seguro de si es necesario eliminar [obj]. Tenga en cuenta que también se colocó la configuración del paquete nuget. Puede eliminar la segunda línea si así lo cree.
<Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="'$(Configuration)' == 'Release'"> <!--remove bin--> <Exec Command="rd /s /q "$(ProjectDir)$(BaseOutputPath)" && ^" /> <!--remove obj--> <Exec Command="rd /s /q "$(BaseIntermediateOutputPath)Release"" /> </Target>
fuente
esta respuesta es genial, solo quiero comentar la última parte de la respuesta
Alternativamente, puede agregar lo siguiente a su perfil.ps1
Entonces puede usar CleanSolution o cs para ejecutar. De esa manera, puede usarlo para cualquier proyecto y sin el prefijo ./ del nombre del archivo
fuente
Extensión de Visual Studio
Solución de clic derecho: seleccione "Eliminar carpetas bin y obj"
fuente