Stack Overflow ha un numero di versione di subversion in basso:
revisione svn: 679
Voglio usare questo controllo automatico delle versioni con i miei .NET Web Site/Application
progetti / soluzioni Windows Forms e WPD.
Come lo implemento?
Stack Overflow ha un numero di versione di subversion in basso:
revisione svn: 679
Voglio usare questo controllo automatico delle versioni con i miei .NET Web Site/Application
progetti / soluzioni Windows Forms e WPD.
Come lo implemento?
Risposte:
Sembra che Jeff stia usando CruiseControl.NET sulla base di alcuni sfogliando le trascrizioni dei podcast. Questo sembra avere funzionalità di distribuzione automatizzate dal controllo del codice sorgente alla produzione. Potrebbe essere questo il luogo in cui avviene l'inserimento?
Lo facciamo con xUnit.net per le nostre build automatizzate. Usiamo CruiseControl.net
(e stiamo provando TeamCity). L'attività MSBuild che eseguiamo per l'integrazione continua cambia automaticamente il numero di build, quindi il file ZIP di build risultante contiene un set di DLL ed EXE con versione corretta.
Il nostro file MSBuild contiene un riferimento UsingTask per una DLL che sostituisce le espressioni regolari: (puoi usare questa DLL, poiché è coperta anche dalla licenza MS-PL)
<UsingTask AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace" />
Successivamente, estraiamo il numero di build, che viene fornito automaticamente dal sistema CI. Puoi anche chiedere al tuo fornitore di controllo del codice sorgente di fornire il numero di revisione della sorgente, se lo desideri, ma abbiamo riscontrato che il numero di build nel sistema CI era più utile, perché non solo può vedere i risultati dell'integrazione in base al numero di build CI, che fornisce anche un link di nuovo al changeset che sono stati inclusi nella build.
<! - Cascading tenta di trovare un numero di build -> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (BUILD_NUMBER) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (ccnetlabel) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> 0 </BuildNumber> </PropertyGroup>
(Proviamo BUILD_NUMBER, che proviene da TeamCity, quindi ccnetlabel, che proviene da CC.net, e se nessuno dei due è presente, impostiamo il valore predefinito su 0, in modo da poter testare manualmente lo script di build automatizzato.)
Successivamente, abbiamo un'attività che imposta il numero di build in un file GlobalAssemblyInfo.cs che colleghiamo a tutti i nostri progetti:
<Target Name = "SetVersionNumber"> <RegexReplace Pattern = "AssemblyVersion \ (" (\ d + \. \ D + \. \ D +) \. \ D + "\)" Sostituzione = 'AssemblyVersion ("$ 1. $ (BuildNumber)")' Files = 'GlobalAssemblyInfo.cs' /> <Exec Command = "attrib -r xunit.installer \ App.manifest" /> </Target>
Questo trova l'attributo AssemblyVersion e sostituisce il numero di versione abcd con abcBuildNumber. Di solito lasceremo il sorgente controllato nell'albero con le prime tre parti del numero del generatore fisse e la quarta a zero (ad esempio, oggi è 1.0.2.0).
Nel processo di compilazione, assicurati che l'attività SetVersionNumber preceda l'attività di compilazione. Alla fine, usiamo la nostra attività Zip per comprimere i risultati della build in modo da avere una cronologia dei binari per ogni build automatizzata.
Puoi farlo aggiungendo quanto segue ovunque nel tuo codice
$Id:$
Quindi, ad esempio @Jeff ha fatto:
<div id="svnrevision">svn revision: $Id:$</div>
e una volta effettuato il check-in, il server ha sostituito $ Id: $ con il numero di revisione corrente. Ho trovato anche questo riferimento .
C'è anche $ Date: $ , $ Rev: $ , $ Revision: $
Se stai usando ASP.Net MVC
(come fa StackOverflow), ho scritto una guida in 3 passaggi facile da seguire su come ottenere e visualizzare automaticamente l'ultima revisione SVN . La guida è stata ispirata dal pensare a me stesso su questa stessa domanda! : o)
@Balloon Se stai usando TortoiseSVN, puoi usare il programma SubWCRev in pacchetto . Interroga una copia funzionante e ti dice solo il numero di revisione più alto. Certo, questo sembra essere un approccio lato client a un problema lato server, ma poiché è un bel programma a riga di comando, dovresti essere in grado di catturarne l'output per l'uso abbastanza facilmente.
$rev
e altri simili sono revisioni per i singoli file, quindi non cambieranno a meno che il file non cambi. Il numero sulla pagina web è (molto probabilmente, sto assumendo qui) il numero di revisione svn per l'intero progetto. Questo è diverso dalle revisioni dei file, a cui altri hanno fatto riferimento.
In questo caso presumo che CCNET stia estraendo il numero di revisione del progetto e riscrivendo una parte della pagina web con quel numero. Qualsiasi soluzione CI dovrebbe essere in grado di farlo, configurarlo da solo con CCNET e Teamcity (sebbene non le pagine web, ma il controllo automatico delle versioni delle versioni di distribuzione / assembly).
Per eseguire questa operazione, utilizzare una soluzione CI che la supporti o utilizzare il processo di compilazione (MSbuild / Nant) per archiviare quella versione e scriverla nei file prima di "distribuirla".
Per aggiungere alla risposta di @ BradWilson: "Puoi anche chiedere al tuo fornitore di controllo del codice sorgente di fornire il numero di revisione del codice sorgente, se lo desideri"
Per connettere Subversion e MSBuild: MSBuild Community Tasks Project