Frage

Das Assemblyversion und AssemblyFileVersion Attribute sind die integrierte Methode zur Verarbeitung von Versionsnummern für .NET-Assemblys. Während das Rahmen die Möglichkeit bietet, die am wenigsten bedeutenden Teile einer Versionsnummer (Erstellung und Überarbeitung, in Microsoft -Begriffen) automatisch zu haben, finde ich die Methode für diese ziemlich schwache und zweifellos viele andere.

Ich möchte also fragen, welche Möglichkeiten entschlossen sind, die besten Versionen bei Versionsnummern zu erledigen, die die tatsächliche Version eines Projekts besser widerspiegeln? Haben Sie ein Skript vor dem Bau, das einen Teil der Version auf Datum und Uhrzeit oder Repository-Version für Ihre Arbeitskopie eines Projekts festlegt? Verwenden Sie nur die automatische Generation, die vom Framework bereitgestellt wird? Oder etwas anderes? Was ist der beste Weg, um Assembly/Dateiversioning zu verwalten?

War es hilfreich?

Lösung

Bei meinem aktuellen Projekt verwenden wir die Subversion -Revisionsnummer als den am wenigsten signifikanten (Build-) Teil der Versionsnummer, und wir verwenden ein Nant -Skript, um die Projekt -AssemblyInfo -Datei zu erstellen. Wir verwenden dieselbe Versionsnummer sowohl für die Assemblyversion- als auch für die AssemblyFileVersion -Attribute. (Die anderen drei Teile sind Major.minor.point, wobei Major.minor jedes Mal inkrementiert wird, wenn es eine Datenbankschema -Änderung gibt, und der Punkt für jede Version erhöht wird.)

Wir begannen mit der Erstellungsnummer, die einfach inkrementiert wurde. Die Versionsdatei wurde jedoch für jeden Build überprüft und bei der Verschmelzung Konflikte verursacht. Als sich dies als nicht bearbeitbar erwies, verwendeten wir CruiseControl.net, um die Build -Nummer zu generieren, aber das machte es schwierig, spezifische Builds manuell zu reproduzieren. Schließlich gingen wir zum aktuellen Schema (Subversion-Revision).

Hinweis: Leider ist es mit .NET nicht möglich, einen Build aus einer früheren Revision perfekt nachzubilden, da die .NET -Compiler beim Kompilieren den aktuellen Zeitstempel in die Objektdatei codieren. Jedes Mal, wenn Sie denselben Code kompilieren, erhalten Sie eine andere Objektdatei.

Andere Tipps

Ich sehe hier viele Beiträge zur Verwendung der Subversion Revision -Nummer als Komponente der Montageversion. Vorsicht: Die 4 in Windows (ABCD) verfügbaren Versionsnummern sind jeweils auf 16 Bit (max = 65535) begrenzt. Die Subversion -Revisionsnummer kann dieses Grenze leicht überschreiten, insbesondere wenn Sie mehrere Projekte im selben Repository hosten.

Bei einem früheren Job, bei dem wir Subversion verwendeten, ließ ich ein Nant -Skript über CCNET ausgeführt, um die Repository -Version zu extrahieren, und diese als endgültige Zahl verwendete.

Bei diesem Job verwenden wir VSS (Shutter), das ist also keine wirklich eine Option, daher haben wir die Richtlinie, es mit den folgenden Richtlinien manuell zu aktualisieren:

  • Hauptfach: signifikante (> 25%) Änderungen oder Zugabe in der Funktionalität oder Schnittstelle.
  • Minor: Kleine Änderungen oder Ergänzungen in der Funktionalität oder Schnittstelle.
  • Build: Kleinere Änderungen, die die Schnittstelle brechen.
  • Revision: Behebung eines Builds, das die Schnittstelle nicht ändert.

Wir halten auch die Montage und die Dateiversionen synchronisiert. Die Montageversion kann programmatisch programmatisch gelesen werden, während die Dateiversion als Spalte im Detail -Modus im Windows Explorer angezeigt werden kann.

Unsere Build -Skripte injizieren die Änderungsset -Nummer von TFS in die Version. Auf diese Weise wissen wir genau, welche Checkins im Build sind.

Wir haben unseren CruiseControl.net -Build -Server die Perforce Changelist -Nummer in die AssemblyFileVersion - Dadurch können wir den Quellcode für jede vom Build -Server erstellte Baugruppe zurückverfolgen. (Wir bauen immer aus dem Hauptzweig.)

Für Versammlungen, auf die sich Kunden beziehen werden, verlassen wir das AssemblyVersion Konstant, es sei denn, es gibt Bruchänderungen. In diesem Fall erhöhen wir die Version, um sicherzustellen, dass der Kundencode gegen die neue Version neu gebaut wird.

Wir verwenden die Versionierung von Subversion und lassen die Buildscripts die Assembly -Versionsinformationen aktualisieren. Source Checkins Control Versioning.

Wir neigen dazu, das Veröffentlichungsdatum (oder erstellen) in die Baugruppe einzubetten. Wenn Sie beispielsweise heute erstellt werden, wäre die Version "2008.10.06" (das Build -Skript aktualisiert sie).

Die AssemblyversionAttribute ist Teil der Identität einer Baugruppe. Wenn Sie sich ändern, ist es eine andere Versammlung und Programme, die mit dieser Baugruppe verknüpft werden, muss neu kompiliert/verknüpft oder eine Versionsrichtlinie muss angewendet werden. Wir fanden das nicht geeignet, also entscheiden wir uns dafür, nur die AssemblyFileVersion für jedes Hotfix zu erhöhen und nur die Assemblyversion für jede Hauptfreisetzung zu ändern. Wir sind uns bewusst, dass diese Entscheidung einige der Win32 DLL Hell zurückbringt. Wir erhöhen die AssemblyFileVersion für jedes Build und beschriften/taggen Sie das Versionskontrollsystem mit dieser Version, damit wir aus der Quelle des Binärs wissen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top