2013-07-18 12 views
15

Sto sviluppando un programma in C# .net in Visual Studio e versione che lo controlla con SVN di tartaruga.Collegamento del numero di revisione SVN di Tortoise alla versione di assieme

Attualmente sto creando la versione di assemblaggio in base al numero di build.

C'è un modo per collegare la parte finale di una versione progetti assemblea per il numero di revisione in tortoisesvn invece, ad esempio:

pseudo codice:

[assembly: AssemblyVersion("1.0.0."+SvnRevisionNumber.ToString())] 

Ciò garantirebbe che le mie assemblee sono stati nominati dopo, non il loro numero di build, ma dopo l'ultimo numero di revisione impegnato nel repository.

risposta

9

Quello che uso sta chiamando un file cmd al post evento di generazione:

@echo off 

if %1x==x goto ERROR 

SET ProjectDir=%1 
SET SubWCRev="C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" 
if exist %SubWCRev% goto USESUBWCREV 

REM Default to copying a default version 
copy %ProjectDir%\Properties\AssemblyInfo.default.cs %ProjectDir%\Properties\AssemblyInfo.cs 
echo default 
goto END 

REM We don't want to modify AssemblyInfo.cs every time, only when a revision 
REM changes. Thus, we want to first compare the last compiled revision with 
REM the current revision, and only update if they've changed. 
:USESUBWCREV 
%SubWCRev% %ProjectDir% %ProjectDir%\Properties\rev.subwcrev-template %ProjectDir%\Properties\rev.current.tmp 
if exist %ProjectDir%\Properties\rev.last-build.tmp goto CHECKREV 
goto NEWREV 

REM Fetch the current revision and compare to last-build revision 
:CHECKREV 
fc %ProjectDir%\Properties\rev.last-build.tmp %ProjectDir%\Properties\rev.current.tmp > NUL 
REM Only update if it's a new revision 
if errorlevel 1 goto NEWREV 
goto END 

REM Current revision doesn't match last-build revision. Update! 
:NEWREV 
echo newRev 
if exist %ProjectDir%\Properties\rev.last-build.tmp del %ProjectDir%\Properties\rev.last-build.tmp 
copy %ProjectDir%\Properties\rev.current.tmp rev.last-build.tmp 
echo use template 
%SubWCRev% %ProjectDir% %ProjectDir%\Properties\AssemblyInfo.subwcrev-template.cs %ProjectDir%\Properties\AssemblyInfo.cs 
echo done 
goto END 

:ERROR 
echo Usage: %0 project_dir 
echo. 
echo For example: 
echo %0 C:\projects\MyProjectDir 
echo. 
goto END 

:END 
+2

Nizza sceneggiatura, l'ho usato, ma ha trovato un problema quando si chiama da un evento come questo accumulo: UpdateSvnVerToAssembly.bat "$ (ProjectDir)" $ (ProjectDir) contiene una barra finale, ma ha un SubWCRev bug che non riesce su percorsi che contengono spazi e barra finale. La soluzione alternativa è inserire un "." dopo la barra finale e le virgolette su tutti i percorsi, quindi sarebbe simile a questo nel file bat: % SubWCRev% "% ProjectDir%." "% ProjectDir% Properties \ AssemblyInfo.subwcrev-template.cs" "% ProjectDir% Properties \ AssemblyInfo.cs" – Grant

+0

Una domanda: * "vogliamo prima confrontare l'ultima revisione compilata con la revisione corrente e aggiornare solo se sono" ve changed "* - dove fa il tuo script questo check? – Groo

+0

@Groo Hai ragione. quando ho scritto questa risposta, ho modificato il mio script per omettere le parti private. Questo alcuni come non è venuto attraverso. Ho modificato la risposta. –

1

È possibile utilizzare qualcosa come questo per ottenere il numero di revisione svn.

Produce praticamente la revisione svn in un file xml, quindi xml dà una sbirciata per ottenere il numero di revisione.

Si potrebbe forse usare questo come evento pre-build e quindi aggiornare il tuo assemblyinfo con il nuovo numero di versione.

controllare anche questa discussione per ulteriori informazioni SVN Revision Version in .NET Assembly w/ out CC.NET

1

sarei esaminando l'Extension Pack MSBuild.

C'è un'estensione Subversion che recupera automaticamente il materiale SVN. Link qui: MSBuild Subversion Extension Help

In secondo luogo, è possibile utilizzarlo con altre estensioni per impostare la versione di una directory in modo programmatico. A seconda del layout nel sistema SCM, potresti essere in grado di eseguire la versione di ogni directory nel proprio repository come questo.

+0

I tuoi 2 link si riferiscono allo stesso URL (MSBuild Subversion Extension Help) – krlzlx

+0

in prima persona a riprenderlo in 3 anni ...Onestamente non so nemmeno il link che stavo cercando di riferire ... – Spence

0

Controllare gli spazi e le virgolette nel file di progetto C#.

<PreBuildEvent> 
     if exist "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.Base.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" 
</PreBuildEvent> 
Problemi correlati