C#: Build Datum und Autoinkrement der Versionsnummer

C#: Build Datum und Autoinkrement der Versionsnummer

Wer hat nicht noch ein paar Assemblies mit der Version 1.0.0.0 herumfliegen? Und hat auch schon ein paar Updates mit der gleichen Versionsnummer erzeugt bzw. sogar ausgeliefert? (Und verläßt sich z. B. auf Dateidatum oder -größe zur Identifizierung?) Dabei ist es einfach, ein Autoinkrement einzuführen. Und.. damit läßt sich auch direkt erklären, warum so manche Software direkt vielstellige Build- und Revisionsnummern anführt.

Versionsnummer automatisch hochzählen

Wenn man sich mal seine Projektstruktur etwas genauer anschaut, fällt einem im Properties Unterordner eine Datei AssemblyInfo.cs auf. Dort findet man u. a. folgende Zeilen (so oder so ähnlich):

1
2
3
4
5
6
7
8
9
10
11
// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]

(Wenn man hier sinnige Werte einträgt, wie z. B. den *, kann man auch direkt andere Werte ändern, wie die Description, Company oder das Copyright.)

Der erste positive Effekt hier ist, daß wir in der generierten Assembly gültige Versionsinformationen haben, die auch per Standard-Windowsmitteln angezeigt werden können.

Nun lassen sich die Versionsdaten natürlich auch wieder aus der eigenen Assembly auslesen:

1
2
3
4
5
var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
int major = version.Major;
int minor = version.Minor;
int build = version.Build;
int revision = version.Revision;

Die zweite schöne Sache ist, daß nunmehr Build-Nummer sowie Revisions-Nummer automatisch erhöht werden. Tja, nicht wirklich inkrementiert nach irgendeinem komplizierten Algorithmus, der feststellen würde, wann sich was geändert hat, sondern diese Werte werden direkt aus dem aktuellen Datum sowie der Tageszeit gebildet. Für die meisten Zwecke vollkommen ausreichend.

Zeitpunkt des Builds bestimmen

Und.. aufgrund der Art und Weise, wie diese Werte gebildet werden, läßt sich auch die Buildzeit wieder rekonstruieren, die oft sehr nützlich ist (Bug X haben wir am 20.3. gefixt, der sollte in der Version also schon behoben sein – so etwas kann den Kundensupport deutlich beschleunigen). Das sieht dann so aus:

1
2
3
4
5
var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan( TimeSpan.TicksPerDay * version.Build + // days since 1 January 2000
    TimeSpan.TicksPerSecond * 2 * version.Revision)); // seconds since midnight, (multiply by 2 to get original)
// a valid date-string can now be constructed like this
string date = buildDateTime.ToShortDateString();

Und.. schon haben wir deutlich mehr Informationen in unserer Assembly, die uns bei der Fehlersuche oder bei der Einordnung einer Datei, auf die wir auf einem unbekannten System stoßen, helfen können. Und das schönste: es kostet uns keinen Mehraufwand. Und gemäß Neno Lojes Empfehlung in seinem Vortrag zu automatischen Builds auf der DevConnections ist es immer eine gute Sache, mehr Qualität (Versionen nachhalten verbessert auch die Qualität) ohne Mehraufwand zu bekommen. Dafür sind gute Tools da.

Übrigens: sollte ein andere Assembly unsere nunmehr versionierte Assembly referenzieren, wird diese von jetzt an auch eine bestimmte Versionsnummer der Datei erwarten. Das ist in der Regel genau das, was wir möchten, verhindert es doch, daß wir irrtümlich noch eine alte .dll einbinden, evtl. noch mit bereits gefixten Problemen.

One thought on “C#: Build Datum und Autoinkrement der Versionsnummer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.