2013-07-18 22 views
15

Ich entwickle ein Programm in C# .net in Visual Studio und Version steuert es mit Tortoise SVN.Linking Tortoise SVN Revisionsnummer zu Assembly Version

derzeit erstellen ich die Assembly-Version basierend auf der Build-Nummer.

Gibt es eine Weise, die ich den letzten Teil einer Projektmontageversion stattdessen auf die Revisionsnummer in Schildkröte SVN verknüpfen kann, zum Beispiel:

Pseudocode:

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

Dies würde sicherstellen, dass meine Baugruppen wurden benannt, nicht ihre Build-Nummer, sondern nach der letzten Revisionsnummer, die dem Repository übergeben wurde.

Antwort

9

Was ich verwende eine cmd-Datei auf dem Postbuildereignis ruft:

@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 Skript, habe ich es gefunden, aber ein Problem, wenn es von einer Build-Veranstaltung wie diese genannt: UpdateSvnVerToAssembly.bat „$ (ProjectDir)“ $ (ProjectDir) enthält einen Schrägstrich, aber SubWCRev hat eine Fehler, der bei Pfaden fehlschlägt, die Leerzeichen und abschließenden Schrägstrich enthalten. Die Problemumgehung besteht darin, ein "." nach dem abschließenden Schrägstrich sowie Anführungszeichen auf allen Pfaden, so würde es in der Fledermaus-Datei so aussehen: % SubWCRev% "% ProjectDir%." "% ProjectDir% Eigenschaften \ AssemblyInfo.subcrev-template.cs" "% ProjectDir% Eigenschaften \ AssemblyInfo.cs" – Grant

+0

Eine Frage: * "Wir wollen zuerst die letzte kompilierte Revision mit der aktuellen Revision vergleichen und nur aktualisieren, wenn sie ' habe sich geändert "* - wo prüft dein Skript? – Groo

+0

@Groo Sie haben Recht. Als ich diese Antwort geschrieben habe, habe ich mein Skript bearbeitet, um private Teile wegzulassen. Dieses einige, wie nicht durchkam. Ich habe die Antwort bearbeitet. –

1

Sie können so etwas verwenden, um die SVN Revisionsnummer zu erhalten.

Es gibt ziemlich viel die Svn-Revision zu einer XML-Datei dann Xml Peeks, um die Revisionsnummer zu erhalten.

Sie könnten dies möglicherweise als Pre-Build-Ereignis verwenden und dann Ihre Assemblyinfo mit der neuen Versionsnummer aktualisieren.

Überprüfen Sie auch diesen Thread für weitere Informationen SVN Revision Version in .NET Assembly w/ out CC.NET

1

ich in die MSbuild Extension Pack suchen würde.

Es gibt eine Subversion-Erweiterung, die automatisch die SVN-Daten für Sie abruft. Link hier: MSBuild Subversion Extension Help

Zweitens könnte man das dann mit anderen Erweiterungen verwenden, um die Version eines Verzeichnisses programmatisch einzustellen. Abhängig von Ihrem Layout in Ihrem SCM-System können Sie möglicherweise jedes Verzeichnis in einem eigenen Repository wie diesem versionieren.

+0

Ihre 2 Links beziehen sich auf die gleiche URL (MSBuild Subversion Extension Help) – krlzlx

+0

Erste Person, die das in 3 Jahren abholt ...Ich weiß ehrlich gesagt nicht einmal den Link, auf den ich mich beziehen wollte ... – Spence

0

Überprüfen Sie die Leerzeichen und Anführungszeichen in der C# -Projektdatei.

<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>