¿Diferencia entre Build Solution, Rebuild Solution y Clean Solution en Visual Studio?

Respuestas:

921
  • La solución de compilación realizará una compilación incremental: si no cree que necesita reconstruir un proyecto, no lo hará. También puede usar partes del proyecto parcialmente construidas si no han cambiado (no sé qué tan lejos lleva esto)
  • Reconstruir la solución limpiará y luego construirá la solución desde cero, ignorando todo lo que se haya hecho antes. La diferencia entre esto y "Limpiar, seguido de Construir" es que Reconstruir limpiará y luego construirá cada proyecto, uno a la vez, en lugar de limpiar todo y luego construir todo.
  • La solución limpia eliminará los artefactos de compilación de la compilación anterior. Si hay otros archivos en los directorios de destino de compilación (bin y obj), es posible que no se eliminen, pero sí los artefactos de compilación reales. He visto que el comportamiento para esto varía, a veces eliminando bastante bien y otras no, pero por el momento le daré a VS el beneficio de la duda :)

(Los enlaces son a los modificadores de línea de comando devenv.exe , pero hacen lo mismo que los elementos del menú).

Jon Skeet
fuente
2
@womp: No en el proyecto que acabo de ver. Todavía tiene todas las asambleas allí ...
Jon Skeet
1
@ Jon - raro. No recuerdo que una limpieza nunca haya limpiado esos directorios. Lo estoy haciendo ahora y está borrando todos los archivos .dll y .pdb. Sin embargo, definitivamente deja solo mi basura ReSharper.
womp
156
Personalmente, he encontrado que "Solución limpia" es más que inútil. Si realmente lo quiero limpio, eliminar manualmente las carpetas bin y obj es el camino a seguir. Incluso me han pillado persiguiendo "errores" fantasmas, hasta que hice eso. Limpiar simplemente no es confiable.
Chris Rogers
77
si los artefactos se abrieron paso a través de otros medios que no sean los artefactos de compilación (por ejemplo, una copia de otra fuente integrada como msbuidltask en el cproj), entonces clean los deja en paz. Lo que lo hace bastante inútil, incluso diría que es peligroso, ya que te dejará con una falsa sensación de limpieza.
Newtopian
44
@verdana: para github, etc., es más simple tener un .gitignorearchivo decente . Pero según la respuesta, Clean no siempre hace un trabajo particularmente minucioso en mi experiencia.
Jon Skeet
455

Solución de compilación: compila archivos de código (DLL y EXE) que se modifican.

Reconstruir: elimina todos los archivos compilados y los vuelve a compilar independientemente de si el código ha cambiado o no.

Solución limpia: elimina todos los archivos compilados (archivos DLL y EXE).

Puede ver este video de YouTube ( Visual Studio Build vs.Rebuild vs. Clean (preguntas de la entrevista de C # con respuestas) ) donde he demostrado las diferencias y a continuación hay representaciones visuales que lo ayudarán a analizar lo mismo con más detalle.

Construir vs reconstruir

La diferencia entre Reconstruir vs. (Limpiar + Construir), porque también parece haber cierta confusión al respecto:

La diferencia es la forma en que ocurre la secuencia de compilación y limpieza para cada proyecto. Digamos que su solución tiene dos proyectos, "proj1" y "proj2". Si realiza una reconstrucción, tomará "proj1", limpiará (eliminará) los archivos compilados para "proj1" y compílelo. Después de eso tomará el segundo proyecto "proj2", limpiará los archivos compilados para "proj2" y compilará "proj2".

Pero si hace una "limpieza" y compilación ", primero eliminará todos los archivos compilados para" proj1 "y" proj2 "y luego construirá" proj1 "primero seguido de" proj2 ".

Reconstruir Vs Clean

Shivprasad Koirala
fuente
26
Gracias por explicar por qué Reconstruir no siempre funciona y, a menudo, necesito limpiar antes de hacer una compilación.
Didier A.
44
Sí, la descripción y el segundo diagrama fueron muy útiles y claros. Si pudiera arreglar el diagrama de flujo "ilegal", de modo que Sí solo vaya a un lugar, eso ayudaría. Realmente no puedo entender lo que está tratando de decir, especialmente con "Build ALL" en "Reconstruir".
Jon Coombs
@ JonCoombs Sí, no creo que el primer diagrama de flujo capturara exactamente lo que dijo en el video. Creo que la imagen que he insertado es a lo que apuntaba Shivprasad.
ruffin
Según tengo entendido, si algún archivo ha cambiado, el proyecto se limpia en una compilación normal, lo que significa que no hará nada o lo limpiará y luego compilará el proyecto. ¿Es esto correcto?
Más claro
147

Tomado de este enlace :

Compilar significa compilar y vincular solo los archivos fuente que han cambiado desde la última compilación, mientras que Reconstruir significa compilar y vincular todos los archivos fuente independientemente de si han cambiado o no. Construir es lo normal y es más rápido. A veces, las versiones de los componentes de destino del proyecto pueden desincronizarse y la reconstrucción es necesaria para que la compilación sea exitosa. En la práctica, nunca necesitas limpiar.

Matthew Jones
fuente
1
¿Enlace? Pensé que la idea de una DLL, también conocida como Dynamic Link Library, era vincular en tiempo de ejecución.
El Dag
77
"En la práctica, nunca necesitas limpiar" <- Llamo BS en este caso.
muelles7
2
piers7 ¿puede proporcionar una razón por la que necesitaría limpiar o reconstruir?
PaulBinder
1
@PaulBinder No necesitas mirar muy lejos.
JakeD
46

Solución de compilación: compila cualquier ensamblado que haya cambiado los archivos. Si un ensamblaje no tiene cambios, no se reconstruirá. Tampoco eliminará ningún archivo intermedio.

Usado más comúnmente.

Reconstruir solución : reconstruye todos los ensamblados independientemente de los cambios, pero deja los archivos intermedios.

Se usa cuando observa que Visual Studio no incorporó sus cambios en el último ensamblado. A veces, Visual Studio comete errores.

Solución limpia : elimine todos los archivos intermedios.

Se usa cuando todo lo demás falla y necesita limpiar todo y comenzar de cero.

Justin Niessner
fuente
25
Clean no hace una construcción.
Jon Skeet
3
@ Jon Skeet: aprende algo nuevo todos los días. Hubiera jurado que hizo una reconstrucción. Supongo que mi memoria no siempre es tan confiable como me gustaría.
Justin Niessner
16

Solo pienso en Reconstruir como realizar la Limpieza primero seguida de la Construcción. Quizás estoy equivocado ... ¿comentarios?

Ken Richards
fuente
Esto no tuvo votos a favor (hasta ahora) y de acuerdo con los documentos (ver el enlace en la respuesta de Jon) esto es exactamente correcto.
Tod
2
No creo que lo haga. Tengo una situación en la que funciona una solución limpia, seguida de Build Solution, pero falla la reconstrucción de una solución. Esto está en una solución recién creada con 2 proyectos (uno dependiente del otro).
Cthutu
@Cthutu Vea la respuesta de Shivprasad para los detalles que marcan la diferencia aquí. Reconstruir limpia y luego construye cada proyecto individual a la vez, mientras que ejecutar Limpiar primero limpia todo de una vez, luego Construir construye todo de una vez. Me he encontrado con instancias donde este cambio en el orden de limpieza / compilación también hace la diferencia entre compilar y no compilar.
Sean
@Sean Tal vez fue causado al agregar un proyecto en su solución como en file referencelugar de un, project referencepor lo que el orden de compilación del proyecto no reconoció que tenía que construir un determinado proyecto antes que otro, y el ensamblaje no existía donde debería haberlo durante el ¿construir?
Zack
14

Solución de compilación: compila cualquier ensamblado que haya cambiado los archivos. Si un ensamblaje no tiene cambios, no se reconstruirá. Tampoco eliminará ningún archivo intermedio.

Reconstruir solución limpiará y luego construirá la solución desde cero, ignorando todo lo que se haya hecho antes

Clean Solution eliminará todos los archivos compilados (es decir, EXE y DLL) del directorio bin / obj.

Guilherme Fidelis
fuente
8

La solución de compilación construirá cualquier proyecto en la solución que haya cambiado. Reconstruir compila todos los proyectos, pase lo que pase, la solución limpia elimina todos los archivos temporales para garantizar que se complete la próxima compilación.

Steven Evers
fuente
6

Solución de compilación: la solución de compilación compilará su aplicación con la cantidad de proyectos que están teniendo algún cambio de archivo. Y no borra ningún archivo binario existente y solo reemplaza los ensamblados actualizados en la carpeta bin u obj.

Reconstruir solución : la solución de reconstrucción construirá toda su aplicación con la construcción de todos los proyectos disponibles en su solución con su limpieza. Antes de compilar, borra todos los archivos binarios de la carpeta bin y obj.

Solución limpia: la solución limpia solo borra todos los archivos binarios de la carpeta bin y obj.

Sabaridass R
fuente
5

Construir solución

Esto realizará una compilación incremental. En otras palabras, solo creará archivos de código que hayan cambiado. Si no han cambiado, esos archivos no serán tocados.

Reconstruir solución

Esto eliminará todos los archivos compilados actualmente (es decir, exe y DLL) y construirá todo desde cero, independientemente de si hay un cambio de código en el archivo o no.

Menú de solución limpia

Este menú eliminará todos los archivos compilados (es decir, EXE y DLL) del directorio bin / obj.

Reconstruir = Limpiar + Construir

Sajisha
fuente
4

Lo más importante que creo que la gente está dejando de lado es que Build and Clean son tareas que se realizan según el conocimiento de Visual Studio de su Proyecto / Solución. Veo muchas quejas de que Clean no funciona o deja archivos sobrantes o no es confiable, cuando, de hecho, las razones por las que dice que no es confiable en realidad lo hacen más confiable.

Clean solo eliminará los archivos y / o directorios (clean) que Visual Studio o el compilador hayan creado. Si copia sus propios archivos o las estructuras de archivos / carpetas se crean a partir de una herramienta o fuente externa, Visual Studio no "sabe que existen" y, por lo tanto, no debe tocarlas.

¿Te imaginas si la operación Clean básicamente realizó un "del *. *"? Esto podría ser catastrófico.

Build realiza una compilación en proyectos modificados o necesarios.

La reconstrucción realiza una compilación independientemente del cambio o de lo que sea necesario.

Clean elimina los archivos / carpetas que ha creado en el pasado, pero inicialmente deja todo lo que no tenía nada que ver.

Espero que esto explique un poco y ayude.

Persecución
fuente
4

Tengo aa solución en blanco BuildRebuildCleany una biblioteca de tres clases Models, Repository, Notification.

Yo uso Modelsy Repositoryen Notificationla biblioteca de clase.

Entonces:

  • Solución de compilación Compilación incremental y compila solo los archivos que se cambian. Si un ensamblaje no tiene cambios, no se reconstruirá. Además, no eliminará ningún archivo intermedio. Si modifica algún código en el Modelsproyecto de la biblioteca, entonces CONSTRUIR solución. En la siguiente captura de pantalla, consulte la marca de tiempo de DLL, EXE se actualiza en Modelsy Notificationbiblioteca.

ingrese la descripción de la imagen aquí

  • Reconstruir solución Elimina todos los archivos compilados y los compila independientemente de los cambios, ignorando todo lo que se haya hecho antes. Haga clic derecho sobre el nombre de la solución BuildRebuildClean. Lo que hace es eliminar todos los ensamblajes, EXE y archivos referidos para compilar nuevamente.

ingrese la descripción de la imagen aquí

  • Solución limpia Elimina todos los archivos intermedios compilados (es decir, archivos EXE y DLL) del directorio bin / obj.

ingrese la descripción de la imagen aquí

Reza Jenabi
fuente
2

Todo lo que sé es que Clean no hace lo que solía hacer "make clean": si limpio una solución, esperaría que elimine los archivos / carpetas obj y bin de modo que se construya como si fuera una nueva compra de la fuente. En mi experiencia, aunque a menudo encuentro momentos en que Clean and Build o Rebuild todavía produce errores extraños en la fuente que se sabe que compila y lo que se requiere es una eliminación manual de las carpetas bin / obj, luego se compilará.

Steve
fuente
Especialmente en proyectos de Xamarin, necesito eliminar manualmente las carpetas bin y obj para resolver errores extraños de compilación
Miguel Febres
0

Esto se refiere solo a la opción "Build Solution".

Estoy completamente harto de la incapacidad de Visual Studio para limpiar realmente las soluciones y escribí esta pequeña herramienta que lo hará por usted.

Primero cierre su solución en VS y arrastre su carpeta desde el Explorador de Windows a esta aplicación o a su icono. Dependiendo de la configuración en la parte inferior de su ventana, también puede eliminar cosas adicionales, lo que ayudará si intenta cargar manualmente su solución en GitHub o compartirla con otra persona:

ingrese la descripción de la imagen aquí

En pocas palabras, colocará todas las carpetas "Debug", Intellisense y otras cachés que VS pueda reconstruir en la Papelera de reciclaje para usted.

ahmd0
fuente