2009-03-04 13 views
13

Ich habe ein VS2008-Projekt in C# mit einer Anzahl von Baugruppen geschrieben. Ich möchte eine einfache Möglichkeit haben, die Versionsnummern zwischen allen verschiedenen Assemblys zu verwalten und die Build-Nummer automatisch zu erhöhen und diese in der Versionsnummer jeder Assembly zu speichern.Automatische Versionsnummerverwaltung in VS2008

Ich vermute, dass dies ein Problem mit den meisten Projekten ist, also vermutlich wurde es zuvor gelöst?

Irgendwelche Vorschläge, wie ich die Verwaltung der Versionsressourcen meines Projekts vereinfachen kann?

Antwort

17

Ich benutze eine CS-Datei auf Lösungsebene, die von allen Projekten in der Lösung verknüpft ist, die die folgenden Zeilen enthalten:

using System.Reflection; 
[assembly : AssemblyVersion("1.2.3.*")] 

Und sicher sein, das AssemblyFileVersion Attribut aus der Assemblydatei in Ihrem Projekt entfernen .

+0

Es sieht nicht so aus, als ob man an VB arbeitet oder ist es wegen Express Edition für VS.NET? Sieht nach einem tollen Trick aus. –

+0

Sie müssen auch eine Verwendung hinzufügen. Ich werde meine Antwort aufgeben. –

+2

Sie meinen das Entfernen des Attributs "AssemblyFileVersion", richtig? – Alexander

0

Sie können eine benutzerdefinierte MSBuild-Aufgabe dazu schreiben. Schauen Sie sich this approach

10

Legen Sie eine Datei in die Lösung, rufen Sie diese "SolutionInfo.cs" (ich gehe davon aus, C#, würde auch in VB arbeiten). In diesem setzen Sie alle Eigenschaften, die Sie gemeinsam haben. Beginnen Sie mit AssemblyVersionAttribute.

Dann in jedem Projekt Verknüpfung zu diesem, indem Sie hinzufügen vorhandenes Element zu jedem Projekt, aber anstatt auf Hinzufügen klicken, verwenden Sie die Dropdown-Liste als Link hinzufügen.

0

Sie können Sternchen in Ihrem AssemblyInfo.cs verwenden:

// Version information 
[assembly: AssemblyVersion("1.0.*")] 

Es wird automatisch Ihre versionnumbers zu erhöhen. Zum Teilen einer Nummer zwischen allen Assemblys ... Ich bin mir nicht sicher, aber vielleicht verwenden Sie das erwähnte Attribut in einer gemeinsamen Datei.

3

Wir haben eine einzelne AssemblyInfoGlobal.cs Datei auf Lösungsebene, wie die anderen Antworten. Dann haben wir als Teil unseres Build-Skripts eine kleine Anwendung, die das von CruiseControl.net definierte CCNetLabel verwendet (und mit dem defaultLabeler die Labels erzeugt) und die globale Datei auscheckt, die Versionsnummer ändert und dann die globale Datei wieder eincheckt .

Einige unserer Projekte haben mehrere Lösungen, so dass die globale Datei über der Lösungsebene in der Verzeichnisstruktur liegt, hoch genug, damit alles, was sie benötigt, darunter liegt.

Wir aktualisieren dann auch die Versionsnummern der Bereitstellungsprojekte - die Nummer dafür befindet sich in der VDProj-Datei, aber ich bin mir nicht sicher, ob Sie diese in den Express-Versionen finden werden - ich denke, das ist eine vollständige Professional-Funktion. Und einige Projekte haben ein Dutzend Bereitstellungsprojekte, aber keine einfache Möglichkeit, die Versionsnummer aus der VDPROJ-Datei selbst zu externalisieren. (oder gibt es?)

Dann passiert der Build, was bedeutet, dass alle Ausgaben von dem Build genau die gleiche Versionsnummer haben, jederzeit können wir die Version von der MSI oder Assembly bekommen und wir wissen genau, welche Quelle war verwendet, um diese Ausgabe zu erstellen.

+0

Wir machen dasselbe mit TeamCity und den MSBuild-Community-Aufgaben. Anstatt nur die Nummer zu erhöhen, was wir tun, setzen wir die Versionsrevision auch auf die Versionsnummer der Quellcodeverwaltung. Dadurch können wir jedes binäre Artefakt genau nach der Quellversion verfolgen. – Todd

0

Ich habe die svnversion MSBuild community tasks verwendet, um etwas wie das zu tun, folgte ich den Anweisungen here Obwohl die Art, wie ich es tue nicht über mehrere Baugruppen erstreckt.

1

using System.Reflection; [assembly : AssemblyVersion("1.2.3.*")]

Nur ein Kommentar zu dieser, die automatisch generierte Versionsnummer Zyklen. Also, wenn Sie in der Lage sein, so zu versionieren, dass ein Build gestern eine Version 1.2.3.X hat, wo X < X ein Build heute ist, dann ist das nicht der Weg zu gehen.

diese Verwendung

[assembly : AssemblyVersion("1.2.*")] 

Diese erhalten Sie Version 1.2.X.Y, wo die Kombination von X · Y größer heute zu erreichen ist, als es gestern ist. Ich vermute, X.Y sind eine Funktion von Datum und Uhrzeit bzw.