Qual è la differenza tra un solo Rebuild e un Clean + Build in Visual Studio 2008? È pulito + Corporatura diverso allora facendo Clean + Ricostruire ?
Qual è la differenza tra un solo Rebuild e un Clean + Build in Visual Studio 2008? È pulito + Corporatura diverso allora facendo Clean + Ricostruire ?
Risposte:
Ricostruisci = Clean + Build (di solito)
Dettagli notevoli:
Per una soluzione multiprogetto, "ricostruisci soluzione" esegue un "clean" seguito da una "build" per ciascun progetto (possibilmente in parallelo). Considerando che una "soluzione pulita" seguita da una "soluzione di costruzione" pulisce prima tutti i progetti (possibilmente in parallelo) e quindi costruisce tutti i progetti (possibilmente in parallelo). Questa differenza nel sequenziamento degli eventi può diventare significativa quando entrano in gioco le dipendenze tra progetti.
Tutte e tre le azioni corrispondono agli obiettivi di MSBuild. Quindi un progetto può sovrascrivere l'azione Ricostruisci per fare qualcosa di completamente diverso.
Earl ha ragione che il 99% delle volte Rebuild = Clean + Build.
Ma non è garantito che siano uguali. Le 3 azioni (ricostruzione, creazione, pulizia) rappresentano diversi target di MSBuild. Ognuno dei quali può essere sostituito da qualsiasi file di progetto per eseguire azioni personalizzate. Quindi è del tutto possibile per qualcuno scavalcare la ricostruzione per fare diverse azioni prima di iniziare un clean + build (o rimuoverle del tutto).
Molto un caso d'angolo, ma sottolineando a causa di discussioni di commento.
Definiamo l'implementazione Rebuild predefinita in termini di implementazioni Clean and Build predefinite:
Per progetto: ricostruzione del progetto = progetto pulito + progetto di costruzione.
Per soluzione: ricostruire sln = foreach project in sln (Clean project + Build project).
Si noti che a causa delle differenze nell'ordine di esecuzione, Ricostruisci sln non è lo stesso di (Clean sln + Build sln) = (foreach project in sln Clean project) + (foreach project in sln Build project). Inoltre, questo "foreach" può essere eseguito contemporaneamente, quindi è possibile eseguire contemporaneamente attività diverse nei due scenari.
Supponi di avere uno sln che contiene proj1, proj2 e proj3.
Ricostruisci sln = (Clean proj1 + Build proj1) & (Clean proj2 + Build proj2) & (Clean proj3 + Build proj3)
Clean Sln + Build Sln = (Clean proj1 & Clean proj2 & Clean proj3) + (Build proj1 & Build proj2 & Build proj3)
+ significa seriale e significa simultaneo.
Quindi, se le dipendenze del progetto non sono configurate correttamente, c'è la possibilità che quando esegui Rebuild sln, alcuni dei tuoi progetti si colleghino a una libreria non aggiornata. Questo perché non è garantito il completamento di tutte le pulizie prima dell'inizio della prima generazione. Se esegui Clean sln + Build sln, visualizzeranno un errore di collegamento e ti informeranno immediatamente, invece di darti un'app con un comportamento strano.
Da http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm , (basta cercarlo su Google):
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.
Build o Rebuild Solution crea o ricostruisce tutti i progetti nella tua soluzione, mentre Build o Rebuild costruisce o ricostruisce il progetto StartUp, "ciao" nella schermata sopra. Per impostare il progetto StartUp, fare clic con il tasto destro sul nome del progetto desiderato nella scheda Esplora soluzioni e selezionare Imposta come progetto StartUp. Il nome del progetto ora appare in grassetto. Poiché le soluzioni per i compiti a casa hanno generalmente un solo progetto, Build or Rebuild Solution è effettivamente lo stesso di Build o Rebuild.
Compilare semplicemente compila il file sorgente attualmente in fase di modifica. Utile per verificare rapidamente la presenza di errori quando il resto dei file di origine è in uno stato incompleto che impedirebbe una corretta compilazione dell'intero progetto. Ctrl-F7 è il tasto di scelta rapida per la compilazione.
Da questo post sul blog che l'autore ha collegato come commento a questa domanda :
In realtà no !!! non sono uguali.
La differenza sta nella sequenza che i progetti vengono ripuliti e compilati. Diciamo che abbiamo due progetti in una soluzione. Clean and then build eseguirà clean per entrambi i progetti e quindi build avverrà singolarmente mentre il progetto A verrà ricostruito e verrà pulito, quindi build dopo quel progetto B sarà pulito e quindi build e così via.