Différence entre Build Solution, Rebuild Solution et Clean Solution dans Visual Studio?

Réponses:

921
  • La solution de génération effectuera une génération incrémentielle: si elle ne pense pas avoir besoin de reconstruire un projet, elle ne le fera pas. Il peut également utiliser des bits partiellement construits du projet s'ils n'ont pas changé (je ne sais pas jusqu'où cela prend)
  • La reconstruction de la solution nettoiera puis créera la solution à partir de zéro, en ignorant tout ce qui a été fait auparavant. La différence entre ceci et «Nettoyer, puis construire» est que la reconstruction nettoiera puis construira chaque projet, un à la fois, plutôt que de tout nettoyer puis de tout construire.
  • Une solution propre supprimera les artefacts de génération de la génération précédente. S'il existe d'autres fichiers dans les répertoires cibles de génération (bin et obj), ils ne peuvent pas être supprimés, mais les artefacts de génération réels le sont. J'ai vu le comportement pour cela varier - parfois en supprimant assez complètement et parfois non - mais je donnerai à VS le bénéfice du doute pour le moment :)

(Les liens sont vers les commutateurs de ligne de commande devenv.exe , mais ils font la même chose que les éléments de menu.)

Jon Skeet
la source
2
@womp: Pas dans le projet que je viens de regarder. Il y a toujours tous les assemblages là-bas ...
Jon Skeet
1
@Jon - bizarre. Je ne me souviens pas d'un nettoyage qui n'ait jamais nettoyé ces répertoires. Je le fais en ce moment et il efface tous les fichiers .dll et .pdb. Laisse définitivement ma jonque ReSharper seule.
womp
156
J'ai personnellement trouvé «Clean Solution» plus que inutile. Si je veux vraiment le nettoyer, la suppression manuelle des dossiers bin et obj est la solution. J'ai même été surpris à courir après des "erreurs" fantômes - jusqu'à ce que je le fasse. Nettoyer n'est tout simplement pas fiable.
Chris Rogers
7
si des artefacts ont fait leur chemin par d'autres moyens que par des artefacts de construction (par exemple, une copie d'une autre source intégrée en tant que msbuidltask dans le cproj), alors clean les laisse être. Ce qui le rend à peu près inutile, je dirais même que c'est dangereux car cela vous laissera un faux sentiment de propreté.
Newtopian
4
@verdana: Pour github, etc., il est plus simple d'avoir un .gitignorefichier décent . Mais selon la réponse, Clean ne fait pas toujours un travail particulièrement approfondi d'après mon expérience.
Jon Skeet
455

Solution de compilation: compile les fichiers de code (DLL et EXE) qui sont modifiés.

Reconstruire: supprime tous les fichiers compilés et les recompile à nouveau, que le code ait changé ou non.

Solution propre: supprime tous les fichiers compilés (fichier DLL et EXE).

Vous pouvez voir cette vidéo YouTube ( Visual Studio Build vs Rebuild vs. Clean (questions d'entrevue C # avec réponses) ) où j'ai démontré les différences et ci-dessous sont des représentations visuelles qui vous aideront à analyser la même chose plus en détail.

Build vs Rebuild

La différence entre Reconstruire et (Nettoyer + Construire), car il semble également y avoir une certaine confusion à ce sujet:

La différence réside dans la façon dont la séquence de génération et de nettoyage se produit pour chaque projet. Supposons que votre solution comporte deux projets, «proj1» et «proj2». Si vous faites une reconstruction, il faudra «proj1», nettoyez (supprimez) les fichiers compilés pour «proj1» et compilez-le. Après cela, il faudra le deuxième projet «proj2», nettoyer les fichiers compilés pour «proj2» et compiler «proj2».

Mais si vous effectuez un «nettoyage» et une construction », il supprimera d'abord tous les fichiers compilés pour« proj1 »et« proj2 », puis il créera« proj1 »d'abord suivi de« proj2 ».

Reconstruire Vs Clean

Shivprasad Koirala
la source
26
Merci d'avoir expliqué pourquoi Rebuild ne fonctionne pas toujours et j'ai souvent besoin de nettoyer avant de faire une build.
Didier A.
4
Oui, la description et le deuxième diagramme étaient très utiles et clairs. Si vous pouviez corriger l'organigramme "illégal", de sorte que Oui ne va qu'à un seul endroit, cela aiderait. Je ne comprends vraiment pas ce que l'on essaie de dire, surtout avec "Build ALL" sous "Rebuild".
Jon Coombs
@ JonCoombs Ouais, je ne pense pas que le premier organigramme capture exactement ce qu'il a dit dans la vidéo. Je pense que l'image que j'ai insérée est ce que Shivprasad visait.
ruffin
Si je comprends bien, si un fichier a changé, le projet est nettoyé sur une version régulière, ce qui signifie qu'il ne fera rien ou qu'il nettoiera puis construira le projet. Est-ce correct?
Plus clair
147

Tiré de ce lien :

Générer signifie compiler et lier uniquement les fichiers source qui ont changé depuis la dernière génération, tandis que Reconstruire signifie compiler et lier tous les fichiers source, qu'ils aient changé ou non. La construction est la chose normale à faire et est plus rapide. Parfois, les versions des composants cibles du projet peuvent se désynchroniser et une reconstruction est nécessaire pour réussir la génération. En pratique, vous n'avez jamais besoin de nettoyer.

Matthew Jones
la source
1
Lien? Je pensais que l'idée d'une DLL, alias Dynamic Link Library, était de lier au moment de l'exécution?
Le Dag
7
"En pratique, vous n'avez jamais besoin de nettoyer" <- j'appelle BS sur celui-ci.
piers7
2
piers7 pouvez-vous alors fournir une raison pour laquelle vous auriez besoin de nettoyer vs reconstruire?
PaulBinder
46

Build Solution - Génère tous les assemblys qui ont modifié des fichiers. Si un assemblage n'a pas de modifications, il ne sera pas reconstruit. Ne supprimera également aucun fichier intermédiaire.

Utilisé le plus souvent.

Solution de reconstruction - Reconstruit tous les assemblys indépendamment des modifications, mais laisse les fichiers intermédiaires.

Utilisé lorsque vous remarquez que Visual Studio n'a pas incorporé vos modifications dans le dernier assembly. Parfois, Visual Studio fait des erreurs.

Clean Solution - Supprimez tous les fichiers intermédiaires.

Utilisé lorsque tout le reste échoue et que vous devez tout nettoyer et recommencer à zéro.

Justin Niessner
la source
25
Clean ne fait pas de build.
Jon Skeet
3
@ Jon Skeet - Apprenez quelque chose de nouveau chaque jour. J'aurais juré qu'il avait fait une reconstruction. Je suppose que ma mémoire n'est pas toujours aussi fiable que je le voudrais.
Justin Niessner
16

Je pense juste à Rebuild comme exécutant le Clean en premier, suivi de Build. Peut-être que je me trompe ... des commentaires?

Ken Richards
la source
Cela n'avait pas de votes positifs (jusqu'à présent) et selon les documents (voir le lien dans la réponse de Jon), c'est tout à fait vrai.
Tod
2
Je ne pense pas. J'ai une situation où faire une solution propre, puis construire une solution fonctionne, mais faire une solution de reconstruction échoue. Il s'agit d'une solution fraîchement créée avec 2 projets (l'un dépendant de l'autre).
Cthutu
@Cthutu Voir la réponse de Shivprasad pour le détail qui fait la différence ici. Reconstruire nettoie puis construit chaque projet individuel à la fois, tandis que l'exécution de Clean nettoie d'abord tout à la fois, puis Build le construit tout à la fois. J'ai rencontré des instances où ce changement dans l'ordre de nettoyage / génération fait la différence entre la compilation et la non-compilation également.
Sean
@Sean Peut-être que cela a été causé par l'ajout d'un projet dans votre solution en tant que file referenceau lieu d'un project referenceafin que l'ordre de construction du projet ne reconnaisse pas qu'il devait construire un certain projet avant un autre, et l'assembly n'existait pas là où il devrait avoir pendant la construire?
Zack
14

Build Solution - Génère tous les assemblys qui ont modifié des fichiers. Si un assemblage n'a pas de modifications, il ne sera pas reconstruit. Ne supprimera également aucun fichier intermédiaire.

La reconstruction de la solution nettoiera puis créera la solution à partir de zéro, ignorant tout ce qui a été fait avant

Clean Solution supprimera tous les fichiers compilés (ie, EXE et DLL) du répertoire bin / obj.

Guilherme Fidelis
la source
8

Build solution créera tous les projets de la solution qui ont changé. Reconstruire construit tous les projets, quelle que soit la solution, la solution propre supprime tous les fichiers temporaires, garantissant que la prochaine génération est terminée.

Steven Evers
la source
6

Build Solution - Build solution construira votre application avec la construction du nombre de projets qui ont un changement de fichier. Et il n'efface aucun fichier binaire existant et remplace simplement les assemblys mis à jour dans le dossier bin ou obj.

Solution de reconstruction - La solution de reconstruction construira votre application entière avec la construction de tous les projets disponibles dans votre solution avec leur nettoyage. Avant de le construire, il efface tous les fichiers binaires du dossier bin et obj.

Solution propre - La solution propre efface simplement tous les fichiers binaires du dossier bin et obj.

Sabaridass R
la source
5

Créer une solution

Cela effectuera une construction incrémentielle. En d'autres termes, il ne construira que des fichiers de code qui ont changé. S'ils n'ont pas changé, ces fichiers ne seront pas touchés.

Reconstruire la solution

Cela supprimera tous les fichiers actuellement compilés (ie, exe et DLL) et construira tout à partir de zéro, qu'il y ait ou non un changement de code dans le fichier.

Menu de solution propre

Ce menu supprimera tous les fichiers compilés (c'est-à-dire les EXE et DLL) du répertoire bin / obj.

Reconstruire = nettoyer + construire

Sajisha
la source
4

La principale chose que je pense que les gens oublient est que la construction et le nettoyage sont deux tâches qui sont effectuées en fonction de la connaissance que Visual Studio a de votre projet / solution. Je vois beaucoup de gens se plaindre que Clean ne fonctionne pas ou laisse des fichiers restants ou n'est pas digne de confiance, alors qu'en fait, les raisons pour lesquelles vous dites qu'il n'est pas digne de confiance le rendent en fait plus digne de confiance.

Clean ne supprimera (nettoiera) que les fichiers et / ou répertoires que Visual Studio ou le compilateur eux-mêmes ont en fait créés. Si vous copiez vos propres fichiers ou que les structures de fichiers / dossiers sont créées à partir d'un outil ou d'une source externe, Visual Studio ne "sait pas qu'elles existent" et ne doit donc pas les toucher.

Pouvez-vous imaginer si l'opération de nettoyage a essentiellement effectué un "del *. *"? Cela pourrait être catastrophique.

Build effectue une compilation sur les projets modifiés ou nécessaires.

Reconstruire effectue une compilation indépendamment du changement ou de ce qui est nécessaire.

Clean supprime les fichiers / dossiers qu'il a créés dans le passé, mais laisse tout ce dont il n'avait rien à faire, au départ.

J'espère que cela élabore un peu et aide.

Chasse
la source
4

J'ai aa solution blanc BuildRebuildCleanet trois bibliothèque de classes Models, Repository, Notification.

J'utilise Modelset Repositoryen Notificationbibliothèque de classe.

Alors:

  • Build solution Incremental build and compiles only the files that are changed. Si un assemblage n'a pas de modifications, il ne sera pas reconstruit. De plus, il ne supprimera aucun fichier intermédiaire. Si Modifiez du code dans le Modelsprojet de bibliothèque, alors CONSTRUISEZ la solution. Dans la capture d'écran ci-dessous, reportez-vous à l'horodatage de DLL, EXE est mis à jour dans Modelset Notificationbibliothèque.

entrez la description de l'image ici

  • Solution de reconstruction Supprime tous les fichiers compilés et les compile indépendamment des modifications, en ignorant tout ce qui a été fait auparavant. Faites un clic droit sur le nom de la solution BuildRebuildClean. Il supprime tous les assemblys, EXE et fichiers référencés à recompiler.

entrez la description de l'image ici

  • Clean Solution Supprime tous les fichiers intermédiaires compilés (c.-à-d. EXE et DLL) du répertoire bin / obj.

entrez la description de l'image ici

Reza Jenabi
la source
2

Tout ce que je sais, c'est qu'un nettoyage ne fait pas ce que "nettoyer" utilisé auparavant - si je nettoie une solution, je m'attendrais à ce qu'elle supprime les fichiers / dossiers obj et bin de telle sorte qu'elle se construit comme si c'était une nouvelle vérification de la source. Dans mon expérience, bien que je trouve souvent des moments où un nettoyage et une construction ou une reconstruction génèrent toujours des erreurs étranges sur la source qui est connue pour être compilée et ce qui est requis est une suppression manuelle des dossiers bin / obj, puis il se construira.

Steve
la source
Surtout dans les projets Xamarin, je dois supprimer manuellement les dossiers bin et obj pour résoudre d'étranges erreurs de compilation
Miguel Febres
0

Il s'agit uniquement de l'option "Build Solution".

J'en ai eu marre de l'incapacité de Visual Studio à vraiment nettoyer les solutions et j'ai écrit ce petit outil qui le fera pour vous.

Fermez d'abord votre solution dans VS et faites glisser son dossier depuis l'Explorateur Windows dans cette application ou dans son icône. Selon le paramètre en bas de sa fenêtre, il peut également supprimer des éléments supplémentaires, qui vous aideront si vous essayez de télécharger manuellement votre solution sur GitHub ou de la partager avec quelqu'un d'autre:

entrez la description de l'image ici

En un mot, il placera tous les dossiers "Debug", Intellisense et autres caches qui peuvent être reconstruits par VS dans la corbeille pour vous.

ahmd0
la source