2012-12-18 2 views
11

Angenommen, ich habe eine Versionsnummer 1.5. *, Die als 1.5.4735.28467 kompiliert wird.Was ist die Formel in .NET für "*" (Wildcard) Versionsnummern?

Was ist die Formel für 4735 und 28467?

+1

major, minor, bauen, Revision. Build und Überarbeitung liegt bei Ihnen .... –

+0

http://blogs.msdn.com/b/jensenh/archive/2005/11/11/491779.aspx. Aber das ist für Microsoft Office; Ich weiß nicht, ob es für das .NET Framework genauso funktioniert. –

+7

Build = DateTime.Today.Subtract (neue DateTime (2000, 1, 1)). Tage; Revision = (int) DateTime.Now.Subtract (DateTime.Today) .TotalSeconds/2; Schade, das wurde geschlossen; das angebliche Duplikat ist eine andere Frage ... – Daniel

Antwort

18

Bitte beachten Sie: gibt es alternative Werkzeuge/Regeln/Systeme/Makros/Add-Ins/etc Versionierung auf eine andere Weise zu steuern; Wenn sie verwendet werden, löschen sie offensichtlich folgendes aus.

Dies ist jedoch, wie eine "*" Version .build.revision in einem Vanille berechnet Visual Studio/.NET Build-Prozess:

Wenn eine Version spezifiziert, müssen Sie zumindest zu großen angeben. Wenn Sie major und minor angeben, können Sie einen Stern (*) für Build angeben. Dies führt dazu, Build seit dem 1. Januar auf die Anzahl der Tage, die gleich sein, 2000 Ortszeit und für Revision auf die Anzahl der Sekunden seit Mitternacht Ortszeit gleich sein, dividiert durch 2.

Siehe Coding Horror: Determining Build Date the hard way und MSDN: AssemblyVersionAttribute. Dieses Standard-Erweiterungsverhalten ist in der AssemblyVersionAttribute-Klasse (BCL!) dokumentiert und nicht das spezielle VS-Compiler-Verhalten (siehe Daniels Kommentar) und nicht ausschließlich das Compiler-Verhalten.


Hier ist eine Implementierung der Formel (wie von Daniels Kommentar extrahiert):

int Build = DateTime.Today.Subtract(new DateTime(2000, 1, 1)).Days; 
int Revision = (int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds/2; 
+3

Es ist definitiv Compiler-Verhalten. Der Compiler instanziiert keine Attribute; Es codiert nur die Argumentwerte in Metadaten. Aber die Zahl wird zur Kompilierzeit ersetzt; Es muss ein spezieller Fall im Compiler sein. Es gibt keine Möglichkeit, ein benutzerdefiniertes Attribut zu schreiben, um etwas Ähnliches zu tun. – Daniel

+0

@Daniel Das ist ein gutes Argument. Ich wünschte, ich könnte eine VS (nicht .NET) Referenz finden, wie Versionsnummern funktionierten. –

+2

Sie können auch die Implementierung in Roslyn sehen: http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/VersionHelper.cs95 – eug

Verwandte Themen