Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Versionsbezogener Support in .NET

Damit man gezielt versionsbezogenen Support leisten kann, muss der Kunde die aktuelle Version z.B. eines SharePoint Webparts mitteilen können.

Es bietet sich an, dafür die Version der Assembly zu verwenden. Per Default ist diese jedoch auf [assembly: AssemblyVersion("1.0.0.0")] eingestellt und ändert sich nicht von allein. Man kann durch Einsatz von Sternchen diese Versionierung automatisieren. Visual Studio zählt dann von selbst hoch. (Mehr Informationen: AssemblyVersionAttribute-Klasse)

Für schnellen und gezielten Support wäre es aber besser, wenn der Kunde die Subversion Revisionsnummer des Quellcodes nennen könnte.

Dazu sind folgende Schritte notwendig:

  1. In der AssemblyInfo.cs den Eintrag
    [assembly: AssemblyDescription("")]
    zu
    [assembly: AssemblyDescription("$Rev$ $Author$ $LastChangedDate$")]
    ändern.
  2. Im SVN-Client die Property „svn:keywords“ für die AssemblyInfo.cs anlegen und den Wert auf „Rev Author LastChangedDate“ setzen.

    Subversion Property

  3. Nun setzt Subversion zukünftig immer die aktuellen Werte bei Commit der AssemblyInfo.cs ein.

    Achtung: Die Ersetzung in der AssemblyInfo.cs findet wirklich nur bei Commit genau dieser Datei statt. Ändert sie sich nicht, sondern wurden z.B. nur Änderungen an anderen Dateien vorgenommen, so wird auch nichts ersetzt.

    Dieses Problem lässt sich wie folgt lösen:

    1. Vor jedem Release sollte vom Entwickler der Wert von AssemblyVersion nach einem festgelegtem Muster erhöht werden. Z.B. erster Teil „bei neuer Hauptversion“, zweiter Teil „bei Erweiterungen“, dritter Teil „bei Bugfixes“, vierter Teil „immer 0“.So hat man zusätzlich zu der eher maschinennahen Revisionsnummer auch noch eine menschenlesbare Nummer, an der man schnell Umfang und Art der Änderungen ablesen kann.

      oder

    2. Ist auf dem Entwickler-Rechner TortoiseSVN installiert, so kann man dessen Kommandozeilentool SubWCRev.exe verwenden. Dann muss nicht erst eine manuelle Änderung in der AssemblyInfo.cs vorgenommen werden.

      Dazu kopiert man die AssemblyInfo.cs zu AssemblyInfo.cs.Template, ändere den Platzhalter in der AssemblyInfo.cs.Template von
      [assembly: AssemblyDescription("$Rev$ $Author$ $LastChangedDate$")]
      zu
      [assembly: AssemblyDescription("$WCREV$ $WCDATE$")]
      und rufe im Pre-Build Event das Tool wie folgt auf:

      Pre-Build

      C:\Program Files\TortoiseSVN\bin\SubWCRev.exe $(SolutionDir) $(ProjectDir)\Properties\AssemblyInfo.cs.Template $(ProjectDir)\Properties\AssemblyInfo.cs

      Wichtig: Man man muss hier mit einem Template arbeiten, da sonst die Ersetzung nur beim ersten Mal funktioniert.

      Jetzt hat man bei jedem Build eine aktuelle AssemblyInfo.cs ohne das man erst jedes Mal ein Commit ausführen muss.

    Da im Gegensatz zu CVS bei SVN die Revisionsnummer nicht für jede Datei einzeln erhöht wird, sondern für das gesamte Repository, haben wir mit der Revisionsnummer eine optimale Angabe um den Versionsstand des Kunden nachzustellen. Der Kunde kann die Version nun in der gelieferten DLL ablesen. (Rechte Maustaste auf Eigenschaften…)

    DLL properties

  4. Um dem Kunden das Ablesen zu vereinfachen, zeigt man die Information aber besser im Impressum der Anwendung an, führt sie in Logfiles mit, etc. So funktioniert das Auslesen mit C#:

    Versionsnummer der Assembly:
    Assembly.GetExecutingAssembly().GetName().Version

    Subversion-Informationen:
    string svnInfo = string.Empty;
    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), true);
    if ( attributes.Length > 0 ) {
    AssemblyDescriptionAttribute descriptionAttribute = attributes[0] as AssemblyDescriptionAttribute ;
    svnInfo = descriptionAttribute.Description;
    }

Nun geht’s schneller beim nächsten Bug… 😉

9. November 2007
|

Related Posts

Pin It on Pinterest