2009-07-27 6 views
33

Abbiamo la convenzione di versionare le nostre build come [major]. [Minor]. [Micro]. [Revisione], ad es. 2.1.2.33546..NET: numeri di revisione grandi in AssemblyVersionAttribute

nostro accumulo di script aggiorna automaticamente un file AssemblyInfo.cs contenente

[assembly: AssemblyVersion("x.y.z.w")] 

al fine di incorporare la versione numero di assemblaggio.

Ma il nostro repository di Subversion ha appena raggiunto la revisione # 65535, che ha infranto la nostra build.

Si scopre che ogni numero nel numero di versione ha un valore massimo di 65534 (probabilmente a causa di una limitazione di Windows).

Hai riscontrato questo problema? Qualche buona soluzione/soluzioni alternative?

Ci piace lo schema di incorporare la revisione-numero e ovviamente non si può semplicemente ripristinare il nostro Subversion server :-)

risposta

36

un po 'più informazioni di base:

Why are build numbers limited to 65535?

Poiché questo è improbabile per avere cambiato, le opzioni sono:

  • Prendere la revisione Modulo 65535, che significa che sono di nuovo a 1
  • Utilizzare il campo Micro nel numero di versione per dividere il numero di versione dividendo la revisione per 1000. Ciò significa che la versione potrebbe essere 1.0.65.535
  • Non archiviare la revisione SVN in AssemblyVersion, ma invece nello AssemblyInformationalVersion. In questo modo l'applicazione può ancora accedervi per scopi di visualizzazione, sebbene non sia più possibile utilizzare Esplora risorse per controllare rapidamente SVN Revisione
  • Non memorizzare Revisione SVN in AssemblyVersion, ma nei campi AssemblyProduct o AssemblyDescription. Ancora, in questo modo la tua applicazione può ancora accedervi, ma anche Explorer lo mostrerà nella finestra delle proprietà.
+5

Se lo si inserisce in AssemblyInformationalVerison, è possibile visualizzarlo in Esplora risorse sotto la proprietà "Versione prodotto". Questa è una buona opzione. – xagyg

9

Una possibilità potrebbe essere quella di utilizzare solo il [AssemblyFileVersion]; questo solleva ancora un avvertimento, ma sarà costruire, almeno:

[assembly: AssemblyFileVersion("1.0.0.80000")] 
+4

Questo problema è stato risolto nelle versioni successive di msbuild (4.0) e non fornisce più un avviso. – JoshSchlesinger

4

According to MSDN, i componenti del numero di versione AssemblyVersionAttribute sono limitati a UInt16.MaxValue - 1dai dati di assemblaggio meta, cioè non è possibile memorizzare più grande numeri in un file di assembly. La versione del file, come suggerisce Marc Gravell, potrebbe essere sufficiente per te, a seconda di chi leggerà il tuo numero di versione.

6

Abbiamo deciso di utilizzare la stessa convenzione e, a causa delle limitazioni dei numeri di versione di Windows, abbiamo scelto di eliminare la parte "micro" dei numeri di versione per preservare il numero di revisione. I numeri di versione sono ora [major].[minor].[revision/10000].[revision % 10000], quindi gli assembly creati dalla revisione 65535 hanno la versione 2.01.6.5535.

+0

Mi piace +1, come si inserisce il valore in AssemblyInfo.cs? –

+9

Assicurati di non utilizzare "aggiornamenti minori" nel programma di installazione di Windows se lo fai (ad es.aggiornamento che evita la disinstallazione/reinstallazione completa). Il programma di installazione di Windows ignorerà completamente il componente della quarta versione. Se non si aggiorna manualmente il componente della terza versione in modo che rifletta le versioni, Windows Installer potrebbe non riuscire ad aggiornare determinati file. –

+2

@Ray Hayes: il nostro script di build NAnt utilizza 'svn info. --xml' per ottenere il numero di revisione della copia di lavoro, quindi chiama un'utilità personalizzata per l'output di tale revisione in un file "SolutionInfo.cs" contenente un attributo [AssemblyVersion]. Questo file non viene aggiunto a Subversion, ma viene semplicemente referenziato da tutti i progetti (utilizzare "Aggiungi come collegamento" in VS) nella soluzione, in modo che siano tutti costruiti con il numero di versione più recente. –