Domanda

Stack Overflow ha un numero di versione di sovversione in basso:

revisione svn:679

Voglio utilizzare tale controllo delle versioni automatico con il mio .NET Web Site/Application, Windows Form, progetti/soluzioni WPD.

Come posso implementarlo?

È stato utile?

Soluzione

Sembra che Jeff la stia usando CruiseControl.NET basato su alcuni sfogliando le trascrizioni del podcast.Sembra avere funzionalità di distribuzione automatizzata dal controllo del codice sorgente alla produzione.Potrebbe essere qui che avviene l'inserimento?

Altri suggerimenti

Lo facciamo con xUnit.net per le nostre build automatizzate.Noi usiamo CruiseControl.net (e stanno provando TeamCity).L'attività MSBuild che eseguiamo per l'integrazione continua modifica automaticamente il numero di build per noi, quindi il file ZIP di build risultante contiene un set di DLL ed EXE con versione corretta.

Nostro File MSBuild contiene un riferimento UsingTask per una DLL che esegue sostituzioni di espressioni regolari:(puoi utilizzare 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.Se lo desideri, potresti anche chiedere al fornitore del controllo del codice sorgente di fornire il numero di revisione del codice sorgente, ma abbiamo riscontrato che il numero di build nel sistema CI era più utile, perché non solo puoi vedere i risultati dell'integrazione tramite il numero di build CI, che fornisce anche un collegarsi ai changeset inclusi nel build.

 <!-- Cascading attempts to find a build number -->

 <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+"\)'
       Replacement='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 a.b.c.d con a.b.c.BuildNumber.Di solito lasceremo il codice sorgente selezionato nell'albero con le prime tre parti del numero del costruttore 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, utilizziamo la nostra attività Zip per comprimere i risultati della build in modo da avere una cronologia dei file 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.anche io trovato questo riferimento.

C'è anche $Data:$, $Rev:$, $Revisione:$

Se stai usando ASP.Net MVC (come fa StackOverflow), ho scritto un file guida in 3 passaggi facile da seguire su come ottenere e visualizzare automaticamente l'ultima revisione SVN.La guida è stata ispirata riflettendo tra me e me proprio su questa domanda!:o)

@BALLOON Se stai usando TortoisVN, puoi usare il pacchetto SubWCRev programma.Interroga una copia di lavoro 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 buon programma a riga di comando, dovresti essere in grado di catturarne l'output per utilizzarlo 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, suppongo 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 pagine Web, ma controllo delle versioni automatico delle versioni di distribuzione/assemblaggio).

A tal fine, utilizzare una soluzione CI che la supporti oppure utilizzare il processo di compilazione (MSbuild/Nant) per archiviare quella versione e scriverla nei file prima di "distribuirla".

Per aggiungere alla risposta di @ BradWilson: "Se lo desideri, potresti anche chiedere al fornitore del controllo del codice sorgente di fornire il numero di revisione del codice sorgente"

Per connettere Subversion e MSBuild:Progetto di attività della community MSBuild

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top