2010-07-27 6 views
13

Abbiamo un processo di compilazione notturno che esegue automaticamente la versione di tutti i progetti C++. Ecco come funziona. C'è un file di intestazione comune VersionNumber.h che ha uno specifico #define per il numero di versione. La build nighly controlla questo file, incrementa l'intero dietro a quello #define e lo archivia. Tutti i progetti di Visual C++ #include quell'intestazione nei loro file di risorse e usano quella definizione per specificare la versione (la versione è smth come 1.0.3.ThatNumber).Come si imposta automaticamente la versione di assemblaggio durante la costruzione notturna?

Fin qui tutto bene. Ora mi piacerebbe avere lo stesso per le librerie di classi C# costruite nella stessa build giornaliera. Attualmente tutti hanno

[assembly: AssemblyVersion("1.0.*")] 

nei file AssemblyInfo.cs e le librerie finiscono con 1.0.HorribleNumber.AnotherHorribleNumber come la versione e le due numeri non sono correlati al numero usato dai progetti C++.

Come posso avere la stessa numerazione di versione automatica deterministica nei miei progetti C# con il minimo sforzo?

risposta

12

In primo luogo è possibile specificare la versione completa come segue:

[assembly: AssemblyVersion("1.0.9.10")] 

In secondo luogo, un approccio comune per rendere questo un po 'più semplice (e fa eco il tuo approccio C++) è per avere un singolo file Version.cs (nome non importante) che si trova in una posizione comune che contiene gli attributi della versione.È quindi possibile add this file as a link per tutti i progetti cs, ricordando di rimuovere gli attributi di versione dai file AssemblyInfo.cs. In questo modo hai solo un singolo file da aggiornare (prima di eseguire la build). È inoltre possibile inserire altri attributi di assembly comuni nel file Version.cs come: NeutralResourcesLanguage o CLSCompliant.

Se non si utilizza un singolo approccio "Version.cs", è possibile lavorare in modo ricorsivo attraverso la struttura della directory del codice sorgente e aggiornare individualmente i file AssemblyInfo (prima di eseguire la build).

Potrebbe non essere rilevante per l'utente, ma i numeri di versione (in AssemblyVersion) hanno un intervallo massimo di 16 bit. Ho visto questo diventare un problema in cui sono state utilizzate le date per questi numeri. Se si desidera avere più latitudine, AssemblyFileVersion non ha questa restrizione, ma è puramente a scopo informativo solo in. Net, piuttosto che parte dell'identità dell'assembly. È comune impostare AssemblyVersion e AssemblyFileVersion sugli stessi valori di alcuni strumenti per visualizzare combinazioni di questi.

vedere il seguente per maggiori informazioni su AssemblyVersion vs AssemblyFileVersion:

What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?

+0

ironicamente, il tuo link "aggiungi questo file come link" - è morto. –

1

Si può fare qualcosa come si fa già per la tecnica C++, ma cercare la stringa "assembly: AssemblyVersion( e sostituire il numero tra virgolette con il numero di versione richiesto completo.

In C# il carattere jolly sul numero di versione indica al compilatore di aggiornare automaticamente il numero di versione. Se non è presente alcun carattere jolly, verrà utilizzato solo il numero completo fornito.

ad es.

[assembly: AssemblyVersion("1.0.3.10")] 

Userà sempre quel numero di versione finché non lo si cambia nel file.

2

Utilizziamo FinalBuilder per le build automatiche (lo chiamiamo TeamCity), e fa questo genere di cose automaticamente (cioè può ottenere un numero di build da qualche altra parte (file ini, variabile di ambiente, riga di comando, qualsiasi cosa) e quindi aggiorna tutte le versioni di assemblaggio per te con il numero di build.)

Ovviamente non è l'unico modo per farlo, ma se non hai usato qualcosa come FinalBuilder, quindi provalo - la nostra esperienza è che inizi a chiedo perché hai passato così tanto tempo ad essere intelligente con Makefile e file batch ...

Ma se non vuoi farlo, puoi ottenere lo stesso processo che genera/modifica il file VersionNumber.h anche sputare fuori VersionNumber.cs, con una linea AssemblyVersion in esso? Quindi puoi semplicemente includere quel file nel tuo progetto.

La direttiva AssemblyVersion non deve necessariamente trovarsi nello stesso file di tutto il resto del materiale AssemblyInfo.

0

È possibile impostare la versione di assieme da un altro file, aggiungendo un collegamento ad esso. Una soluzione simile è

link text

+0

Il link è rotto – splattne

+0

@splattne un tuffo nel passato. Questa risposta è stata pubblicata quasi cinque anni fa e sembra che il link non sia più valido. La risposta accettata sopra è davvero eccezionale. –