2009-06-10 11 views
18

Ho un sistema di build automatizzato che utilizza CruiseControl. Sto utilizzando SvnRevisionLabeller per ottenere la stringa della versione da utilizzare. Con questa stringa posso usare nant per aggiornare AssemblyInfo.cs così quando lo costruisco ha la stringa di compilazione corretta. Posso anche usare questa etichetta CC per taggare il repository di subversion.AssemblyInfo.cs dovrebbe essere inserito nel controllo della versione?

Quindi tutto è allineato
- etichetta Corporatura CCNet
- eseguibile (Informazioni Assembly)
- Version Control (tag subverson)

Ora, dove ho un problema è se voglio provare a ricostruire un vecchia immagine dal repository. Poiché AssemblyInfo.cs non è sotto controllo di versione ma piuttosto un file generato, quando provo a creare, le informazioni sulla versione non saranno le stesse di quando è stata creata questa versione del repository utilizzando CruiseControl. Mi piacerebbe essere in grado di generare esattamente la stessa immagine indipendentemente dal fatto che sia stata costruita durante la build CC o in una data successiva al momento del check out da Subversion.

So che spesso non è consigliabile, ma dovrei fare il check-in del file assemblyInfo.cs dopo ogni compilazione in modo che quando costruisco successivamente da una svn check-out vengano utilizzate le informazioni sulla versione corretta?

Grazie, Liam

risposta

2

ho sempre farlo controllare in. In realtà credo che questo è il comportamento di default con il controllo del codice sorgente Team System.

+0

Sto usando Subversion e CrusieControl.NET. Costruisco usando uno script NAnt. Tutto quello che ho letto è che AssemblyInfo.cs è un output generato durante il processo di compilazione.Quindi la sequenza di build è: - CCNet (SVN trigger da un check-in @say repository la versione 100) NAnt chiamato msbuild chiamato AssemblyInfo.cs viene creata afgter l'accumulo faccio a ora il check-in AssemblyInfo.cs ? Se il check-in del repository sarebbe quindi a Rev 101. Quindi il mio obiettivo di avere AssemblyInfo.cs che corrisponde alla revisione della build non è soddisfatto. Come faccio a fare questo? –

+0

Credo che il motivo per cui non si desidera controllare in AssemblyInfo.cs nel tuo caso è perché il tuo sistema CI lo sta generando. Con una build normale incluso il modo in cui i server di compilazione TFS lo fanno, AssemblyInfo.cs viene archiviato e non viene generato per ogni build. – majinnaibu

7

O non eseguire affatto la versione AssemblyInfo.cs, o inserire "versione di sviluppatore" nel repository e fare in modo che CruiseControl.Net svn-ripristini dopo la compilazione (faccio la successiva in modo che le build fatte sulle workstation degli sviluppatori siano facilmente estinguibile da quelli "ufficiali" scaricati da CruiseControl.Net).

Come per la riproduzione delle stesse etichette di compilazione in un secondo momento - è già necessario eseguire la ricostruzione chiamando MSBuild/NAnt a mano, passare semplicemente a esso CCNetLabel impostato sul valore appropriato e si otterranno le stesse versioni di assieme generate come con build invocato da CruiseControl.Net (MSBuild: /p:CCNetLabel=1.4.2.333, NAnt: -D:CCNetLabel=1.4.2.333).

7

Uso un file CommonAssemblyInfo.cs a cui aggiungo un collegamento in ogni progetto.

L'unico attributo presente in questo file è AssemblyFileVersion e CC.Net/Msbuild aggiorna la versione ogni build.

Verificare che qualsiasi progetto che include CommonAssemblyInfo.cs non abbia attributi duplicati in AssemblyInfo.cs.

Se verifichi il codice sorgente CC.Net, vedrai che è come sono configurati.

0

Abbiamo uno script MSBuild che genera tutti i file AssemblyInfo.cs necessari prima della generazione. In questo modo posso anche usare il numero di revisione SVN nelle versioni di assemblaggio. I file AssemblyInfo.cs non vengono archiviati in SVN (vengono ignorati in modo che non infastidiscano le persone) ma generati prima della creazione (non importa se si tratta di uno script di build automatico o di VS).

Fornisco anche un file batch per occuparsi della generazione dei file AssemblyInfo.cs in modo che gli sviluppatori non debbano preoccuparsi dei dettagli.