Differenza tra Build Solution, Rebuild Solution e Clean Solution in Visual Studio?


Risposte:


921
  • La soluzione di build eseguirà una build incrementale: se non pensa di dover ricostruire un progetto, non lo farà. Può anche usare bit del progetto parzialmente costruiti se non sono cambiati (non so quanto ci si spinga)
  • Ricostruisci la soluzione pulirà e quindi costruirà la soluzione da zero, ignorando tutto ciò che è stato fatto prima. La differenza tra questo e "Clean, seguito da Build" è che Rebuild pulirà, quindi costruirà ogni progetto, uno alla volta, piuttosto che pulire tutto e poi costruire tutto.
  • La soluzione pulita rimuoverà gli artefatti della build dalla build precedente. Se ci sono altri file nelle directory di destinazione della build (bin e obj), potrebbero non essere rimossi, ma lo sono gli artefatti della build. Ho visto comportamenti per questo variare - a volte eliminando abbastanza accuratamente e talvolta no - ma darò a VS il beneficio del dubbio per il momento :)

(I collegamenti sono alle opzioni della riga di comando devenv.exe , ma fanno lo stesso delle voci di menu.)


2
@womp: non nel progetto che ho appena visto. Ha ancora tutte le assemblee lì ...
Jon Skeet,

1
@Jon - strano. Non ricordo un clean che non abbia mai ripulito quelle directory. Lo sto facendo proprio ora e sta cancellando tutti i file .dll e .pdb. Sicuramente lascia la mia spazzatura ReSharper da solo però.
womp,

156
Personalmente ho trovato "Clean Solution" più che inutile. Se lo voglio davvero pulito, eliminare manualmente le cartelle bin e obj è la strada da percorrere. Sono stato anche sorpreso a inseguire "errori" fantasma - fino a quando non l'ho fatto. Clean non è affidabile.
Chris Rogers,

7
se gli artefatti si sono fatti strada attraverso mezzi diversi da quelli di compilazione (ad esempio una copia da un'altra fonte integrata come msbuidltask nel cproj), allora clean li lascia. Il che lo rende praticamente inutile, direi persino che è pericoloso in quanto ti lascerà con un falso senso di pulizia.
Newtopian,

4
@verdana: per github ecc., è più semplice avere un .gitignorefile decente . Ma secondo la risposta, Clean non fa sempre un lavoro particolarmente accurato nella mia esperienza.
Jon Skeet,

455

Soluzione di compilazione: compila file di codice (DLL ed EXE) che vengono modificati.

Ricostruisci: elimina tutti i file compilati e li ricompila indipendentemente dal fatto che il codice sia cambiato o meno.

Soluzione pulita: elimina tutti i file compilati (file DLL e EXE).

Puoi vedere questo video di YouTube ( Visual Studio Build vs. Rebuild vs. Clean (domande sull'intervista in C # con risposte) ) in cui ho dimostrato le differenze e di seguito sono rappresentazioni visive che ti aiuteranno ad analizzare lo stesso in modo più dettagliato.

Build vs Rebuild

La differenza tra Rebuild vs. (Clean + Build), perché sembra esserci anche un po 'di confusione in questo:

La differenza sta nel modo in cui la sequenza di creazione e pulizia avviene per ogni progetto. Supponiamo che la tua soluzione abbia due progetti, "proj1" e "proj2". Se fai una ricostruzione ci vorrà “proj1”, pulisci (elimina) i file compilati per “proj1” e costruiscilo. Dopodiché ci vorrà il secondo progetto "proj2", pulire i file compilati per "proj2" e compilare "proj2".

Ma se fai un "clean" e costruisci ", prima eliminerà tutti i file compilati per" proj1 "e" proj2 "e poi costruirà prima" proj1 "seguito da" proj2 ".

Ricostruisci Vs Clean


26
Grazie per aver spiegato perché Rebuild non funziona sempre e spesso ho bisogno di pulire prima di fare una build.
Didier A.

4
Sì, la descrizione e il secondo diagramma sono stati molto utili e chiari. Se potessi correggere il diagramma di flusso "illegale", in modo che Sì vada solo in un punto, ciò sarebbe d'aiuto. Non riesco davvero a capire cosa stia cercando di dire, specialmente con "Build ALL" in "Rebuild".
Jon Coombs,

@JonCoombs Sì, non credo che il primo diagramma di flusso abbia catturato esattamente ciò che ha detto nel video. Penso che l'immagine che ho inserito sia ciò a cui Shivprasad mirava.
ruffin,

A quanto ho capito, se un file è cambiato, il progetto viene ripulito su una build normale, il che significa che non farà nulla o pulirà e quindi costruirà il progetto. È corretto?
Più chiaro

147

Tratto da questo link :

Build significa compilare e collegare solo i file di origine che sono stati modificati dall'ultima build, mentre Rebuild significa compilare e collegare tutti i file di origine indipendentemente dal fatto che siano stati modificati o meno. Costruire è la cosa normale da fare ed è più veloce. A volte le versioni dei componenti di destinazione del progetto possono non essere sincronizzate e la ricostruzione è necessaria per il successo della compilazione. In pratica, non hai mai bisogno di pulire.



1
Link? Pensavo che l'idea di una DLL, nota anche come Dynamic Link Library, fosse quella di collegarsi in fase di esecuzione?
The Dag

7
"In pratica non hai mai bisogno di pulire" <- Chiamo BS su questo.
piers7,

2
piers7 puoi quindi fornire un motivo per cui dovrai pulire o ricostruire?
PaulBinder,


46

Crea soluzione: crea tutti gli assembly che hanno modificato i file. Se un assembly non presenta modifiche, non verrà ricostruito. Inoltre non eliminerà alcun file intermedio.

Usato più comunemente.

Ricostruisci soluzione : ricostruisce tutti gli assiemi indipendentemente dalle modifiche ma lascia i file intermedi.

Utilizzato quando si nota che Visual Studio non ha incorporato le modifiche nell'assembly più recente. A volte Visual Studio commette errori.

Soluzione pulita : elimina tutti i file intermedi.

Utilizzato quando tutto il resto fallisce e devi ripulire tutto e ricominciare da capo.


25
Clean non fa una build.
Jon Skeet,

3
@Jon Skeet - Impara qualcosa di nuovo ogni giorno. Avrei giurato che avesse fatto una ricostruzione. Immagino che la mia memoria non sia sempre affidabile come vorrei.
Justin Niessner,

16

Penso solo a Rebuild come eseguire prima il Clean seguito da Build. Forse mi sbaglio ... commenti?


Questo non ha avuto voti (fino ad ora) e secondo i documenti (vedi il link nella risposta di Jon) questo è esattamente giusto.
Tod

2
Non credo. Ho una situazione in cui funziona una soluzione pulita, seguita da Build Solution, ma fare una soluzione di ricostruzione non riesce. Si tratta di una soluzione appena creata con 2 progetti (uno a carico dell'altro).
Cthutu,

@Cthutu Vedi la risposta di Shivprasad per i dettagli che fanno la differenza qui. Ricostruisci clean e quindi costruisce ogni singolo progetto alla volta, mentre l'esecuzione di Clean prima pulisce tutto in una volta, quindi Build costruisce tutto in una volta. Ho incontrato casi in cui questa modifica nell'ordine clean / build fa la differenza tra compilazione e non compilazione.
Sean,

@Sean Forse è stato causato dall'aggiunta di un progetto nella tua soluzione file referenceanziché come, project referencequindi l'ordine di costruzione del progetto non ha riconosciuto che doveva costruire un determinato progetto prima di un altro e l'assemblaggio non esisteva dove avrebbe dovuto durante costruire?
Zack,

14

Crea soluzione: crea tutti gli assembly che hanno modificato i file. Se un assembly non presenta modifiche, non verrà ricostruito. Inoltre non eliminerà alcun file intermedio.

Ricostruisci la soluzione pulirà e quindi costruirà la soluzione da zero, ignorando tutto ciò che è stato fatto prima

Clean Solution eliminerà tutti i file compilati (cioè, EXE e DLL) dalla directory bin / obj.


8

Crea soluzione costruirà tutti i progetti nella soluzione che sono stati modificati. Ricostruisci costruisce tutti i progetti, qualunque sia, la soluzione pulita rimuove tutti i file temporanei assicurando che la build successiva sia completa.


6

Build Solution - Build solution costruirà la tua applicazione costruendo il numero di progetti che stanno cambiando file. E non cancella alcun file binario esistente e sostituisce semplicemente gli assiemi aggiornati nella cartella bin o obj.

Soluzione di ricostruzione: la soluzione di ricostruzione costruirà l'intera applicazione con la creazione di tutti i progetti disponibili nella soluzione con la pulizia. Prima di crearlo cancella tutti i file binari dalla cartella bin e obj.

Soluzione pulita: la soluzione pulita cancella tutti i file binari dalla cartella bin e obj.


5

Crea soluzione

Ciò eseguirà una build incrementale. In altre parole, creerà solo file di codice che sono stati modificati. Se non sono stati modificati, tali file non verranno toccati.

Ricostruisci la soluzione

Questo eliminerà tutti i file attualmente compilati (ad esempio, exe e DLL) e costruirà tutto da zero, indipendentemente dal fatto che ci sia o meno una modifica del codice nel file.

Menu soluzione pulita

Questo menu eliminerà tutti i file compilati (ovvero, EXE e DLL) dalla directory bin / obj.

Ricostruisci = Clean + Build


4

L'unica cosa importante che penso che la gente stia tralasciando è che Build and Clean sono entrambe attività che vengono eseguite in base alla conoscenza di Visual Studio del tuo Progetto / Soluzione. Vedo molte lamentele sul fatto che Clean non funzioni o lasci i file rimanenti o non sia affidabile, quando in realtà i motivi per cui dici che non è affidabile lo rendono in realtà più affidabile.

Clean rimuoverà solo i file (puliti) e / o le directory che Visual Studio o il compilatore stesso hanno effettivamente creato. Se copi i tuoi file o le strutture di file / cartelle create da uno strumento o una fonte esterni, Visual Studio non "sa che esistono" e quindi non dovrebbe toccarli.

Riesci a immaginare se l'operazione Clean abbia sostanzialmente eseguito un "del *. *"? Questo potrebbe essere catastrofico.

Build esegue una compilazione su progetti modificati o necessari.

Rebuild esegue una compilazione indipendentemente dalle modifiche o da ciò che è necessario.

Clean rimuove i file / le cartelle che ha creato in passato, ma inizialmente lascia tutto ciò che non aveva a che fare con.

Spero che questo elabori un po 'e aiuti.


4

Ho aa soluzione in bianco BuildRebuildCleane tre libreria di classi Models, Repository, Notification.

Uso Modelse Repositorynella Notificationlibreria di classi.

Poi:

  • Soluzione di compilazione Creazione incrementale e compilazione solo dei file modificati. Se un assembly non presenta modifiche, non verrà ricostruito. Inoltre, non eliminerà alcun file intermedio. Se Modifica un po 'di codice nel Modelsprogetto di libreria, allora BUILD solution. Nella schermata seguente, fare riferimento al timestamp della DLL, EXE viene aggiornato Modelse Notificationlibreria.

inserisci qui la descrizione dell'immagine

  • Ricostruisci soluzione Elimina tutti i file compilati e compila tutti indipendentemente dalle modifiche, ignorando tutto ciò che è stato fatto prima. Fare clic con il tasto destro sul nome della soluzione BuildRebuildClean. Ciò che fa è eliminare tutti gli assembly, i file EXE e i file di riferimento da compilare nuovamente.

inserisci qui la descrizione dell'immagine

  • Soluzione pulita Elimina tutti i file intermedi compilati (ovvero, EXE e DLL) dalla directory bin / obj.

inserisci qui la descrizione dell'immagine


2

Tutto quello che so è che un Clean non fa quello che faceva "make clean" - se pulisco una soluzione mi aspetterei che elimini obj e bin file / cartelle in modo tale che costruisca come fosse un nuovo checkout della fonte. Nella mia esperienza, anche se trovo spesso momenti in cui un Clean and Build o Rebuild produce ancora strani errori sul sorgente che è noto per la compilazione e ciò che è richiesto è una cancellazione manuale delle cartelle bin / obj, allora costruirà.


Soprattutto nei progetti Xamarin, devo eliminare manualmente le cartelle bin e obj per risolvere strani errori di compilazione
Miguel Febres,


0

Questo riguarda solo l'opzione "Build Solution".

Mi sono completamente stufato dell'incapacità di Visual Studio di pulire davvero le soluzioni e ho scritto questo piccolo strumento che lo farà per te.

Chiudi prima la soluzione in VS e trascina la sua cartella da Esplora risorse in questa app o nella sua icona. A seconda dell'impostazione nella parte inferiore della finestra, può anche rimuovere elementi aggiuntivi, che ti aiuteranno se provi a caricare manualmente la tua soluzione su GitHub o a condividerla con qualcun altro:

inserisci qui la descrizione dell'immagine

In poche parole, inserirà tutte le cartelle "Debug", Intellisense e altre cache che possono essere ricostruite da VS nel Cestino per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.