77 Stimmen

Warum ist System.Version in .NET als Major.Minor.Build.Revision definiert?

Warum ist System.Version in .NET als Major.Minor.Build.Revision definiert? Fast jeder (auch ich) scheint der Meinung zu sein, dass Revision an dritter Stelle steht und "Build" oder wie auch immer man es nennen möchte, an letzter Stelle.

Verwendet Microsoft die Zahlen überhaupt auf diese willkürliche Art und Weise, z. B. 3.5.3858.2, oder sind die Namen selbst einfach verkehrt herum? Wenn Sie zum Beispiel Ihre eigene Versionsklasse mit der Reihenfolge Major.Minor.Build.Revision schreiben würden, wäre es dann richtig, die letzten beiden Komponenten bei der Konvertierung in eine System.Version zu vertauschen, oder ignorieren Sie das und tun einfach so, als wären die Namen rückwärts?

40voto

Nick Craver Punkte 609016

Ich denke, die Verwirrung kommt daher, was die meisten als "Überarbeitung" betrachten und was Microsoft tut :

  • Bauen: Ein Unterschied in der Build-Nummer bedeutet eine Neukompilierung desselben Quellcodes. Dies wäre aufgrund von Änderungen am Prozessor, an der Plattform oder am Compiler angebracht.

  • Revision: Baugruppen mit demselben Namen, derselben Haupt- und Nebenversionsnummer, aber unterschiedlichen Revisionen sollen vollständig austauschbar sein. Dies wäre z. B. sinnvoll, um eine Sicherheitslücke in einer zuvor veröffentlichten Baugruppe zu schließen.

Der Aspekt der Sicherheitsbehebung, der bei ihnen wahrscheinlich viel häufiger vorkommt, scheint ein triftiger Grund zu sein, sie als "geringfügigste" Änderung an die letzte Stelle zu setzen.

36voto

Charlie Hills Punkte 556

Mir ist klar, dass ich ein bisschen zu spät zur Party komme, aber ich wollte meine Meinung dazu sagen, warum die Reihenfolge der Erstellung und Überarbeitung "falsch" ist. Es ist nicht so sehr, dass sie in der falsch Ordnung, sondern dass sie nicht in cualquier bestellen.

Die Version einer Baugruppe ist im Grunde genommen Major.Minor. Aus dem oben erwähnten Link Microsoft sagt: "Nachfolgende Versionen einer Assembly, die sich nur durch Build- oder Revisionsnummern unterscheiden, gelten als Hotfix-Updates der vorherigen Version. Version ." [Meine Hervorhebung]

El Bauen Sie stellt eine Neukompilierung desselben Quelltextes dar. Die Revision stellt eine Codeänderung dar, die jedoch mit anderen Revisionen der gleichen [Major.Minor]-Version vollständig austauschbar ist. Keine der beiden Versionen hat jedoch Vorrang vor der anderen.

Zusammenfassend kann man also sagen, dass man es nicht so sehen sollte:

+ Major
|
+-+ Minor
  |
  +-+ Build
    |
    +-+ Revision

Aber stattdessen:

+ Major
|
+-+ Minor
  |
  +-+ Build
  |
  +-+ Revision

17voto

ChrisW Punkte 53239

Verwendet Microsoft die Zahlen überhaupt so willkürlich, z. B. 3.5.3858.2?

Wenn Sie es standardmäßig zulassen, z. B. durch Angabe von [assembly: AssemblyVersion("1.1.*")] , dann wird die dritte Zahl jeden Tag erhöht, und die vierte Zahl ist die Anzahl der Sekunden seit Mitternacht, geteilt durch zwei (um zu unterscheiden, ob es mehr als ein Gebäude an einem Tag gibt).

Fast alle (mich eingeschlossen) scheinen sich einig zu sein, dass die Überarbeitung an dritter Stelle steht und der "Aufbau" oder wie auch immer man es nennen möchte, an letzter Stelle.

Microsoft scheint "Build" als Synonym für "Tag" zu verwenden: Vielleicht hängt das mit der Idee der "täglichen Builds" zusammen; und eine "Revision" ist dann eine andere Version des (täglichen) Builds.

3voto

Oskar Berggren Punkte 5516

Eine späte Antwort, aber ich denke, die anderen Antworten könnten noch ein wenig erweitert werden.

Die Begriffe "Build" und "Revision" sind lediglich Microsoft-Terminologie. Die Klasse System.Version kümmert sich in keiner Weise darum, wie Sie sie zuordnen.

Was die Umstellung der Reihenfolge der Teile auf Ihre eigene Terminologie angeht, würde ich sagen, dass Sie die Wörter im Grunde völlig ignorieren und stattdessen überlegen sollten, was die System.Version まったくもって definiert:

  • Ein Zeichenkettenformat, das geparst und erzeugt werden kann:

    major.minor[.build[.revision]]

    Das bedeutet, dass Sie, wenn Sie es gewohnt sind, Ihre eigene Version im Format x.y.z.w, dann sollten Sie die Klasse Version auf diese Weise instanziieren:

    new Version(x, y, z, w)

    Jede andere Reihenfolge der Parameter entspricht nicht dem, was Parse() und ToString() tun würden. Wenn Sie z und w vertauschen, würde ToString() x.y.w.z ausgeben ausgeben, was für jeden verwirrend wäre, wenn man x.y.z.w erwartet.

  • A Versionsvergleich und Sortierreihenfolge , wobei die Versionen sortiert werden zuerst nach Major, dann nach Minor, dann Build, dann Revision, wie die meisten von uns erwarten würden erwarten. Das heißt, 1.2.5 ist später als 1.2.3.7.

    Wenn Sie also den Versionsstring als 1.2.6.4 angeben und wollen, dass er als als 1.2.5.8 angesehen werden soll, dann ändern Sie nicht die Reihenfolge der Teile im dem Konstruktor Version.

Kurz gesagt: Die Begriffe Major/Minor/Build/Revision können zwar einen Hinweis darauf geben, welche Zahl angesichts der Menge der Änderungen erhöht werden sollte, aber die Terminologie hat nur sehr wenig Einfluss darauf, wie die Klasse tatsächlich verwendet wird. Die Formatierung und Sortierung ist das, was zählt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X