SvnRevisionTool

Gibt Informationen zur aktuellen SVN-Revision eines Arbeitsverzeichnisses aus und schreibt sie automatisch zum Erstellen in dein .NET-Projekt.

Archivierter Inhalt: Diese Anwendung ist derzeit inaktiv und möglicherweise veraltet, nicht mehr gewartet oder funktioniert nicht mehr.

Diese Anwendung wurde durch NetRevisionTool ersetzt. NetRevisionTool ist eine Weiterentwicklung von GitRevisionTool und SvnRevisionTool in einem Programm und bietet neue flexible Funktionen.

SvnRevisionTool ist ein kleines Entwicklerwerkzeug, das Informationen zur aktuellen SVN-Revision eines Arbeitsverzeichnisses ausgibt. Es kann diese Angaben auch direkt in deinen Anwendungsquelltext schreiben, so dass sie gleich mitkompiliert werden. Das funktioniert für .NET-Projektmappen in C# und VB.NET, die die übliche Visual-Studio-Projektstruktur verwenden.

Warum?

Jede etwas größere Anwendung hat eine Versionsnummer, die der Benutzer in einer Form von Über/Info-Dialogfenster abrufen kann. Wenn du häufig neue Versionen veröffentlichst und keine strukturierten Versionsnummern verwalten möchtest (wie die von SvnRevisionTool selbst), könntest du einfach die SVN-Revisionsnummer oder den Commit-Zeitpunkt als Versionsnummer für dein Produkt verwenden. Durch das automatisierte Eintragen dieser Revisionsnummer in den Anwendungsquelltext vermeidest du es, das einmal zu vergessen. Außerdem harmoniert die Keyword-Ersetzungsfunktion von Subversion selbst nicht besonders gut mit C#-/VB.NET-Quelltext, um eine lesbare Versionsangabe für das Assembly zu erzeugen. SvnRevisionTool ist für diesen Fall optimiert.

Wie wird es benutzt?

Lad das Programm herunter und kopier es in das Verzeichnis deiner Visual-Studio-Projektmappe. Ich stecke solche kleinen Helferlein gerne in ein Unterverzeichnis „_scripts\bin“ (siehe Screenshot unten), gemeinsam mit dem PowerShell-Build-Framework. Du solltest die Programmdatei ins SVN-Repository aufnehmen, um es portabel zu halten.

Öffne dann die Projekteigenschaften und geh auf die Seite Buildereignisse (siehe Screenshot unten). Gib die folgende Befehlszeile für das Präbuildereignis ein (in einer Zeile):

if not defined FASTBUILD "$(SolutionDir)\_scripts\bin\SvnRevisionTool.exe" -ai "$(ProjectDir)"

Wenn du ein Unterverzeichnis verwendet hast, musst du den Pfad wie im Screenshot anpassen. Dann noch die Befehlszeile für das Postbuildereignis:

if not defined FASTBUILD "$(SolutionDir)\_scripts\bin\SvnRevisionTool.exe" -si "$(ProjectDir)"

Wichtig: Das Postbuildereignis muss immer ausgeführt werden, um sicherzustellen, dass die veränderte Quelltextdatei immer richtig wiederhergestellt wird, auch wenn sich das Projekt gerade nicht erstellen lässt.

Die Einschränkung mit der Umgebungsvariable „FASTBUILD“ ermöglicht es, die Ausführung von GitRevisionTool für jedes einzelne Projekt zu steuern. Für Projektmappen mit vielen (> 25) Projekten kann diese Umgebungsvariable gesetzt werden (auf einen beliebigen nicht-leeren Wert), um die Ausführung von GitRevisionTool zu unterbinden. Dadurch wird die Builddauer verkürzt. Bei Nutzung des PowerShell-Build-Frameworks wird diese Variable ebenfalls genutzt und GitRevisionTool im Multi-Projekt-Modus gestartet. Wird diese Eigenschaft nicht benötigt oder gewünscht und das PowerShell-Buildskript nicht genutzt, kann der Teil if not defined FASTBUILD auch weggelassen werden, um sicherzustellen, dass GitRevisionTool immer verwendet wird.

Öffne jetzt die Datei AssemblyInfo.cs oder .vb, um die Versionsangabe einzurichten. Diese Datei befindet sich normalerweise im Ordner „Properties“ oder „My Project“. Die vierte Stelle in den Versionsnummern der Attribute AssemblyVersion und AssemblyFileVersion wird automatisch mit der SVN-Revision ersetzt, egal, was dort steht. Du kannst auch nach dem AssemblyInformationalVersion-Attribut suchen oder es hinzufügen, falls es noch nicht da ist, und ausführlichere Angaben durch einen Platzhalter einfügen lassen. Hier ein Beispiel:

[AssemblyVersion("1.0.0.0")]
[AssemblyFileVersion("1.0.0.0")]
[AssemblyInformationalVersion("MyApp r{commit}/{date:ymd-}")]

Daraus wird dann z. B. folgendes:

[AssemblyVersion("1.0.0.627")]
[AssemblyFileVersion("1.0.0.627")]
[AssemblyInformationalVersion("MyApp r627/2015-01-27")]

Die Programmausgabe für den Parameter --help verrät dir alle Details. Es gibt auch die Option, ein übergeordnetes Verzeichnis zu durchsuchen, oder ein unverändertes Arbeitsverzeichnis zu erfordern und andere nützliche Dinge.

Wie tut es das, was es tut?

SvnRevisionTool wird im Präbuildereignis mit dem Parameter -a aufgerufen. Das ist jedes Mal beim Erstellen des Projekts, bevor der Compiler loslegt. Es findet deine AssemblyInfo.cs- oder .vb-Datei und ersetzt die Versionsangabe in den oben genannten Attributen und den Platzhalter im AssemblyInformationalVersion-Attribut mit den aktuellen Revisionsdaten. Visual Studio verwendet diese Datei dann zum Kompilieren. Zum Schluss wird mit dem Parameter -s die Datei aus der vorher angelegten Sicherungskopie wiederhergestellt, damit du (und Subversion) keine Veränderungen siehst.

Wichtig: Damit das so funktioniert, darf die AssemblyInfo-Datei während des Erstellens nicht im Visual-Studio-Editor geöffnet sein. Ansonsten werden die Änderungen, die SvnRevisionTool in diese Datei schreibt, vom Compiler ignoriert. Wenn du die Versionsangabe änderst und Test-Builds erstellst, musst du diese Datei also immer wieder schließen.

Kompatibilität: .NET Ab Version 2.0 Windows 10 Windows 8 Windows 7 Windows XP Mono 64 bit

Ich habe noch ein ähnliches, neueres Tool, das das gleiche für Git-Repositorys macht, und noch weitere Daten mit Platzhaltern einfügen kann: GitRevisionTool

Bilder

Hinweis: Die folgenden Screenshots sind vom GitRevisionTool, beschreiben aber im Prinzip dasselbe.

Image
GitRevisionTool.exe im bin-Verzeichnis
Image
Build-Ereignisse im Projekt

Download

SvnRevisionTool.exe57 KiBProgrammdatei, Version 1.7.3, .NET 4.0 (Empfohlen für Windows 8/10 sowie alle Projekte mit VS 2010 oder neuer)

SvnRevisionTool_NET20.exe57 KiBProgrammdatei, Version 1.7.3, .NET 2.0

master.zipAktueller Quelltext direkt von GitHub (GitRevisionTool und SvnRevisionTool)

Es gibt ein öffentliches Git-Repository von GitRevisionTool bei GitHub, das auch dieses Projekt enthält.

Funktioniert es nicht?

SvnRevisionTool versteht Arbeitskopien bis Version 1.6.x selbst. Neuere Formatversionen benötigen ein installiertes SVN-Programm. Das wird an verschiedenen Stellen automatisch gesucht, darunter die Installationsverzeichnisse des Apache SVN-Clients sowie TortoiseSVN (mit aktivierter CLI-Option).

SvnRevisionTool kann nur C#- und VB.NET-Projektdateien verarbeiten. Für andere Projekttypen wird es nur die Revisionsnummer ausgeben. Die kannst du ggf. mit anderen Tools weiterverarbeiten.

Dies ist selbst eine .NET-Anwendung. Sie ist für das .NET-Framework 2.0 erstellt, du solltest also keine Probleme unter Windows Vista oder neuer haben. Wenn du Visual Studio 2005 oder neuer verwendest, hast du das .NET-Framework sowieso bereits installiert.

Änderungen

2015Jan26
Version 1.7.3
  • Added separate .NET 4.0 build, recommended for Windows 8/10 or all VS 2010+ projects
  • Reorganised AssemblyInfo.cs
  • Added icon (like in GitRevisionTool)
2014Mai2
Version 1.7.2
  • Fixed PATH parsing for quoted entries
2014Mrz4
Version 1.7
  • Added support for Linux system environments
  • Also searching SVN executable in the PATH environment variable
  • Added missing output of commit date and time
  • Updated help message
2014Jan12
Version 1.6
  • Added base28 version format as new bmin, renamed base36 format to b36min
2013Jun20
Version 1.5.1
  • Fixed version 12 (SVN 1.7) detection with no line break
2013Apr22
Version 1.5
  • Added multi-project mode
2013Apr19
Version 1.4
  • Backport from GitRevisionTool 1.4, supporting more placeholders and options
  • Added support for SVN 1.7/1.8 format, using installed Subversion CLI, e. g. from TortoiseSVN
  • Effectively changed licence from Freeware to Open-Source GPL
2011Apr6
Version 1.3
  • Clarified docs about ignored AssemblyInfo changes (and deprecated project patch option)
  • Added more debug output (revision number and more)
  • Added option to specify separate search path for SVN files
2010Sep9
Version 1.2
  • Searching AssemblyInfo.{cs,vb} file in $(ProjectDir) (no subdirectory)
2010Mrz3
Version 1.1
  • Added Visual Basic .NET projects support
  • Searching for AssemblyInfo.vb file in “$(ProjectDir)\My Project”
2009Aug29
Version 1.0
  • First version

Lizenz und Nutzungsbedingungen

Diese Software wird unter den Bedingungen der GNU-GPL-Lizenz Version 3 veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download oder auf der GNU-Website.

Statistische Daten

  • Erstellt am 2009-08-29, aktualisiert am 2015-01-26.
  • Ca. 1 190 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 1 200 - 4 800 €