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

Versionsbezogener Support in .NET

Damit man gezielt ver­si­ons­be­zo­ge­nen Support leis­ten kann, muss der Kunde die aktu­elle Version z.B. eines SharePoint Webparts mit­tei­len können.

Es bie­tet sich an, dafür die Version der Assembly zu ver­wen­den. Per Default ist diese jedoch auf [assembly: AssemblyVersion("1.0.0.0")] ein­ge­stellt und ändert sich nicht von allein. Man kann durch Einsatz von Sternchen diese Versionierung auto­ma­ti­sie­ren. Visual Studio zählt dann von selbst hoch. (Mehr Informationen: AssemblyVersionAttribute-Klasse)

Für schnel­len und geziel­ten Support wäre es aber bes­ser, wenn der Kunde die Subversion Revisionsnummer des Quellcodes nen­nen könnte.

Dazu sind fol­gende 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 anle­gen und den Wert auf "Rev Author LastChangedDate" setzen. 

    Subversion Property

  3. Nun setzt Subversion zukünf­tig immer die aktu­el­len Werte bei Commit der AssemblyInfo.cs ein.

    Achtung: Die Ersetzung in der AssemblyInfo.cs fin­det wirk­lich nur bei Commit genau die­ser Datei statt. Ändert sie sich nicht, son­dern wur­den z.B. nur Änderungen an ande­ren Dateien vor­ge­nom­men, 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 fest­ge­leg­tem Muster erhöht wer­den. Z.B. ers­ter Teil "bei neuer Hauptversion", zwei­ter Teil "bei Erweiterungen", drit­ter Teil "bei Bugfixes", vier­ter Teil "immer 0".So hat man zusätz­lich zu der eher maschi­nen­na­hen Revisionsnummer auch noch eine men­schen­les­bare Nummer, an der man schnell Umfang und Art der Änderungen able­sen kann.

      oder

    2. Ist auf dem Entwickler-Rechner TortoiseSVN instal­liert, so kann man des­sen Kommandozeilentool SubWCRev.exe ver­wen­den. Dann muss nicht erst eine manu­elle Änderung in der AssemblyInfo.cs vor­ge­nom­men wer­den.

      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 arbei­ten, da sonst die Ersetzung nur beim ers­ten Mal funktioniert.

      Jetzt hat man bei jedem Build eine aktu­elle AssemblyInfo.cs ohne das man erst jedes Mal ein Commit aus­füh­ren muss.

    Da im Gegensatz zu CVS bei SVN die Revisionsnummer nicht für jede Datei ein­zeln erhöht wird, son­dern für das gesamte Repository, haben wir mit der Revisionsnummer eine opti­male Angabe um den Versionsstand des Kunden nach­zu­stel­len. Der Kunde kann die Version nun in der gelie­fer­ten DLL able­sen. (Rechte Maustaste auf Eigenschaften…)

    DLL properties

  4. Um dem Kunden das Ablesen zu ver­ein­fa­chen, zeigt man die Information aber bes­ser im Impressum der Anwendung an, führt sie in Logfiles mit, etc. So funk­tio­niert 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 schnel­ler beim nächs­ten Bug… 😉

9. November 2007
|

Related Posts

Pin It on Pinterest