2011-08-31 20 views
15

In questo momento i nostri assembly hanno un numero di versione come 2.0.831.0. A quanto ho capito, questa è la versione principale, la versione minore, la data e il numero di build. Se cambio e ricostruisco lo stesso giorno è 2.0.831.1, 2.0.831.2 ecc.Realizzazione della versione di TeamCity Assemblaggio .NET Versione

Il mio formato di numero di build TeamCity è semplicemente 2. {0} dove {0} è un numero incrementato automaticamente che va semplicemente per sempre (2.195, 2.196 ecc.).

Come faccio a rendere TeamCity esattamente come la versione di assemblaggio? Vogliamo essere in grado di associare il registro delle modifiche alla versione dell'assembly in modo che chiunque possa dire che la versione 2.0.831.2 dell'assembly ha queste modifiche in questi file.

Ulteriori informazioni: Il nostro passo di costruzione utilizza l'opzione "Visual Studio (sln)" invece di "MSBuild" se questo è importante. Usiamo Subversion per il controllo del codice sorgente se questo è importante. La nostra versione di TeamCity è 6.5.1 (build 17834).

+0

http://stackoverflow.com/questions/1041153/teamcity-labeling-vcs-subversion-with-an-artifacts-file-version – sylvanaar

risposta

21

Si consiglia di adottare lo semantic versioning scheme{major}.{minor}.{patch} e aggiungere un quarto elemento per il numero di build {major}.{minor}.{patch}.{build}. Questo è molto più utile per includere la data di costruzione nello schema di controllo delle versioni.

TeamCity 6.5 (non è stata specificata una versione) ha una funzione di compilazione che può essere utilizzata per applicare la patch alla versione in AssemblyInfo.cs durante la compilazione. Vedere la documentazione per AssemblyInfo Patcher.

AssemblyInfo patcher dialog (TeamCity documentation)

È quindi possibile definire il formato di numero di build nel modo in cui vorreste avere nella vostra assemblea e utilizzare il formato per la costruzione stessa, come anche per la funzione di patch.

+0

Commento su Ccellar come risposta perché non ho abbastanza reputazione per commentare. Il formato della stringa della versione è: major.minor [.build [.revision]] Il numero di build è il 3 ° elemento, non il 4o. Se AssemblyVersion non ha questo formato, la classe Version avrà valori errati nelle proprietà Build and Revision. http://msdn.microsoft.com/en-us/library/system.version.aspx – jbtibor

+2

@jbtibor Buon punto che Microsoft abbia uno schema di numeri di versione diverso, ma direi che lo schema di ccellar ha più senso, ed è lo schema che uso. Pensaci: il numero di build sarà sempre univoco quando si utilizza il numero di build di TeamCity, quindi più build potrebbero avere la stessa revisione, ma non è possibile avere più revisioni sulla stessa build, il che sembra suggerire lo schema di MS. –

+0

È possibile utilizzare l'attributo AssemblyInformationalVersionAttribute in AssemblyInfo.cs per specificare la versione semere (questo attributo consente di specificare qualsiasi stringa come versione). Questo valore potrebbe quindi essere raccolto e utilizzato dal processo di creazione. Mi piace l'idea che spetti allo sviluppatore, prima di commettere una modifica per decidere le informazioni sulla versione per la cosa che lui/lei controlla. –

6

Una soluzione è utilizzare il conduttore MSBuild e scrivere uno script MSBuild che legge le informazioni sulla versione dal file AssemblyInfo, imposta la versione di build di TeamCity su tale valore durante l'esecuzione della build, quindi incrementa la parte del numero di build di quella versione e scrive il valore su AssemblyInfo.

Questo non è particolarmente banale, in quanto è necessario avere una comprensione della scrittura di script MSBuild personalizzati, e sarà probabilmente necessario utilizzare alcune delle attività della comunità ecc per leggere/scrivere le informazioni sulla versione.

Utilizziamo anche il concetto di un file AssemblyInfo globale, che fa riferimento a tutti i nostri assembly (utilizzando Aggiungi collegamento in VS), pertanto è necessario aggiornare solo un file durante la generazione.

C'è un articolo eccellente here, che descrive la creazione di attività CI comuni con MSBuild. Sta usando CruiseControl.NET, ma la maggior parte di esso si applica ancora. Tuttavia, se stai usando TeamCity 6.5, cercherò di utilizzare esclusivamente le sue funzionalità di compilazione, poiché sarà molto più semplice da gestire rispetto a uno script MSBuild personalizzato.

+1

Tutto ciò ha senso. Ci sono tutorial per realizzare questo? Non ho mai lavorato con MSBuild in precedenza. Hai qualche esempio specifico? – Dzejms

+0

risposta aggiornata. – devdigital

Problemi correlati