2010-11-15 2 views
10

solo per rendere più chiaro per me, vorrei chiedere a voi ragazzi la condizione (s) corretto per avere il vostro progettoQuando si dovrebbe preferire ReBuild anziché Build?

o soluzione Rebuildinvece diaccumulo in Visual Studio?

Se lo riformulo: Perché MS ha dovuto creare l'opzione "Ricrea TUTTI" in Visual Studio? Qual era il motivo principale per farlo?

Grazie!

risposta

7

ASCIUTO: Ricostruisci = Pulisci + Crea per ogni progetto a turno.

Build non elimina le uscite di build precedenti. Ricostruisci li elimina e ricostruisce (un progetto alla volta se ci si trova in una soluzione: eliminare proj1 \ bin \ Debug, creare proj1, eliminare proj2 \ bin \ Debug ...).

Il caso principale quando eseguo una ricostruzione (o una compilazione pulita) è quando devo aggiornare le mie terze dipendenze della soluzione. Vediamo la seguente struttura di cartelle:

 
    SOLUTION 
     |__Dependencies 
     |__PROJ_1 
     |__bin 
     |__obj 
     |__(code) 
     |__PROJ_2 
     |__bin 
     |__obj 
     |__(code) 

Se cambio i miei DLL in dipendenze e non faccio una ricostruzione, VS (e MsBuild) sarebbe ancora utilizzare la versione dll precedente che è in PROJ_N \ bin \ Debug (o in bin \ Release), a causa della dipendenza ordine di ricerca (vedi http://www.beefycode.com/post/Resolving-Binary-References-in-MSBuild.aspx):

  1. file dal progetto attuale - indicato da {CandidateAssemblyFiles}
  2. $(ReferencePath) - la proprietà percorso di riferimento, che proviene dal file .USER.
  3. Il hintpath dall'elemento di riferimento stesso, indicato da {HintPathFromItem}.
    ...

La dll nella cartella bin va nel primo caso di ricerca, la dll nella cartella Dipendenze arriva nel secondo caso ...

In tal caso vorrei fare un pulito (Debug), clean (Release) e quindi una build per sradicare tutte le versioni precedenti nella cartella bin. Sono forse un po 'eccessivo e una ricostruzione potrebbe essere sufficiente ma non sono sicuro perché le DLL si trovano nelle cartelle Debug e Release ...

+0

In altre parole, 'Rebuild' =' Clean' + ' Build' – abatishchev

+0

La maggior parte delle volte, e per un singolo progetto, sì. Vedi http://stackoverflow.com/questions/1247457/difference-between-rebuild-and-clean-build-in-visual-studio-2008. –

+1

Nei tuoi Microsoft.Common.Targets, puoi vederlo per un progetto Ricreazione = BeforeRebuild; Pulito; $ (_ ProjectDefaultTargets) AfterRebuild; –

1

A volte le cose vanno male e la build non funziona.

Ciò accade ad es. quando non aggiorno correttamente le librerie dipendenti che poi non sono copiate correttamente nei percorsi bin della build. Ci sono altri esempi, non mi viene in mente.

Ecco quando uso la ricostruzione.