2010-07-27 12 views
13

Wir haben einen nächtlichen Build-Prozess, der automatisch alle C++ - Projekte versioniert. So funktioniert das. Es gibt eine gemeinsame Header-Datei VersionNumber.h, die eine spezifische #define für die Versionsnummer hat. Der night-Build überprüft diese Datei, erhöht die Ganzzahl dahinter #define und überprüft sie. Alle Visual C++ - Projekte #include diesen Header in ihre Ressourcen-Dateien und verwenden Sie diese für die Angabe der Version definieren (Version ist smth wie 1.0.3.ThatNumber).Wie stelle ich die Assembly-Version während des nächtlichen Builds automatisch ein?

So weit so gut. Nun möchte ich das Gleiche für die C# -Klassenbibliotheken haben, die im selben täglichen Build erstellt wurden. Derzeit haben sie alle

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

in den AssemblyInfo.cs Dateien und Bibliotheken am Ende mit 1.0.HorribleNumber.AnotherHorribleNumber als die Version und die beiden Zahlen korrelieren nicht mit der Anzahl, die von C++ Projekten.

Wie kann ich in meinen C# -Projekten mit minimalem Aufwand dieselbe deterministische automatische Versionsnummerierung verwenden?

Antwort

12

Zum einen können Sie die Vollversion wie folgt an:

[assembly: AssemblyVersion("1.0.9.10")] 

Zweitens einen gemeinsamen Ansatz dies ein wenig einfacher (und Echos C++ Ansatz) zu machen ist eine einzige Version.cs-Datei (unwichtiger Name) zu haben, die sich an einem gemeinsamen Speicherort befindet, in dem die Versionsattribute enthalten sind.Sie können dann add this file as a link für alle Ihre CS-Projekte, wobei Sie daran denken, die Versionsattribute aus Ihren AssemblyInfo.cs-Dateien zu entfernen. Auf diese Weise haben Sie nur eine einzige Datei zum Aktualisieren (vor dem Ausführen Ihres Builds). Sie können auch andere allgemeine Assemblyattribute in Ihre Version.cs-Datei einfügen, z. B .: NeutralResourcesLanguage oder CLSCompliant.

Wenn Sie keinen einzigen "Version.cs" -Ansatz verwenden, können Sie rekursiv durch Ihre Quelltextverzeichnisstruktur arbeiten und AssemblyInfo-Dateien einzeln aktualisieren (bevor Sie Ihren Build ausführen).

Es ist möglicherweise nicht relevant für Sie, aber die Versionsnummern (in AssemblyVersion) haben eine maximale Reichweite von 16bit. Ich habe gesehen, dass dies zu einem Problem wurde, wo Daten für diese Nummern verwendet wurden. Wenn Sie einen größeren Breitengrad wünschen, verfügt AssemblyFileVersion nicht über diese Einschränkung, sondern dient ausschließlich zu Informationszwecken nur in .NET und nicht als Teil der Identität der Assembly. Es ist üblich, AssemblyVersion und AssemblyFileVersion auf die gleichen Werte zu setzen, da einige Tools Kombinationen von diesen anzeigen.

die folgenden für mehr auf Assembly vs Assembly Siehe:

What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?

+0

ironisch, Ihre "diese Datei als Link hinzufügen" -Link - ist tot. –

1

Sie können etwas tun, wie Sie bereits für Ihre C++ - Technik tun, aber suchen Sie nach der "assembly: AssemblyVersion( Zeichenfolge und ersetzen Sie die Zahl in Anführungszeichen mit der vollen, erforderlichen Versionsnummer.

In C# teilt der Platzhalter der Versionsnummer dem Compiler mit, die Versionsnummer automatisch zu aktualisieren. Wenn kein Platzhalter vorhanden ist, wird nur die angegebene vollständige Nummer verwendet.

z.B.

[assembly: AssemblyVersion("1.0.3.10")] 

Diese Versionsnummer wird immer verwendet, bis Sie sie in der Datei ändern.

2

Wir verwenden FinalBuilder für automatisierte Builds (wir haben es von TeamCity nennen), und es macht diese Art von Sachen automatisch (dh es kann eine Build-Nummer von woanders bekommen (Ini-Datei, Umgebungsvariable, Befehlszeile, was auch immer) und dann aktualisieren Sie alle Assembly-Versionen für Sie mit der Build-Nummer.)

Offensichtlich nicht die einzige Möglichkeit, es zu tun, aber wenn Sie nicht so etwas wie FinalBuilder verwendet haben, dann probieren Sie es aus - unsere Erfahrung beginnt wundere dich, warum du vorher so lange damit verbracht hast, mit Makefiles und Batch-Dateien clever zu sein ...

Aber wenn du das nicht willst, kannst du den gleichen Prozess bekommen, der die VersionNumber.h Datei erzeugt/modifiziert spreche ich auch VersionNumber.cs mit einer AssemblyVersion-Zeile aus? Dann können Sie diese Datei einfach in Ihr Projekt einfügen.

Die AssemblyVersion-Direktive muss nicht in der gleichen Datei wie der Rest Ihrer AssemblyInfo-Dateien sein.

0

Sie können die Assemblyversion aus einer anderen Datei setzen, indem Sie einen Link hinzufügen. Eine ähnliche Lösung ist

link text

+0

Ihr Link – splattne

+0

@splattne eine Explosion aus der Vergangenheit gebrochen. Diese Antwort wurde vor fast fünf Jahren gepostet und es scheint, dass der Link nicht mehr gültig ist. Die angenommene Antwort oben ist wirklich großartig. –