Почему System.Version в .NET определяется как Major.Minor.Build.Revision?

Почему System.Version в .NET определяется как Major.Minor.Build.Revision? Почти все (включая меня), похоже, согласны с тем, что пересмотр относится к третьему месту, и "построить" или что бы вы хотели назвать его последним.

Использует ли Microsoft даже номера в этом случайном порядке, например. 3.5.3858.2, или сами имена сами назад? Например, если вы должны были написать свой собственный класс Version с порядком Major.Minor.Build.Revision, было бы целесообразно заменить последние два компонента при преобразовании в System.Version, или вы проигнорируете его и просто притворитесь именами назад?

Ответ 1

Я думаю, что путаница приходит к тому, что большинство считают "ревизией" и что делает Microsoft:

  • Сборка: разница в числе строчек представляет собой перекомпиляцию того же источника. Это было бы уместно из-за изменений в процессорах, платформах или компиляторах.

  • Редакция: сборки с одинаковыми именами, номерами основных и второстепенных версий, но разные версии должны быть полностью взаимозаменяемыми. Это было бы уместно, чтобы исправить отверстие безопасности в ранее выпущенной сборке.

Угол исправления безопасности, вероятно, гораздо более общий для них, по-видимому, является достойной причиной, чтобы иметь его на последнем месте, так как "самое незначительное" изменение.

Ответ 2

Я понимаю, что я прихожу на вечеринку немного поздно, но я хотел поделиться своим двойством о том, почему порядок сборки и пересмотра "неправильный". Это не так, что они в неправильном порядке, но они не в каком-то порядке.

Версия сборки, когда дело доходит до нее, - Major.Minor. Из вышеупомянутой ссылки Microsoft говорит: "Последующие версии сборки, которые отличаются только номерами сборки или ревизий, считаются обновлениями исправлений предыдущей версии версии". [Мой акцент]

Сборка представляет собой перекомпиляцию того же источника. Пересмотр представляет собой изменение кода, но полностью перекрестно с другими версиями той же версии [Major.Minor]. Но ни один из них не имеет приоритета над другим.

Итак, в общем, не думайте об этом как:

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

Вместо этого:

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

Ответ 3

Использует ли Microsoft даже номера в этом случайном порядке, например. 3.5.3858.2

Если вы укажете его по умолчанию, например. указав [assembly: AssemblyVersion("1.1.*")], то третье число увеличивается каждый день, а четвертое число - это количество секунд с полуночи, разделенное на два (чтобы устранить неоднозначность, если в течение одного дня было больше одной сборки).

Почти все (включая меня), похоже, согласны с тем, что пересмотр относится к третьему месту, и "построить" или что бы вы хотели назвать его последним.

Microsoft, похоже, использует "сборку" как синоним "дня": возможно, это связано с идеей "ежедневных сборок"; и тогда "ревизия" является другой версией (ежедневной) сборки.

Ответ 4

Поздний ответ, но я чувствую, что другие ответы могут быть немного расширены.

Термины "сборка" и "ревизия" - это просто терминология Microsoft. Класс System.Version не заботится о том, как вы их назначаете.

Что касается переключения порядка частей в соответствии с вашей собственной терминологией, я бы сказал, что вы должны полностью игнорировать слова и вместо этого учитывать то, что действительно определяет System.Version:

  • Формат строки, который он может анализировать и генерировать:

    major.minor[.build[.revision]]
    

    Это означает, что если вы привыкли иметь свою собственную версию, отформатированную как xyzw, то вам следует создать экземпляр класса Version следующим образом:

    new Version(x, y, z, w)
    

    Любой другой порядок параметров не будет совпадать с действиями Parse() и ToString(). Если вы переключите z и w, то ToString() выведет xywz, что может сбить с толку всех, если вы ожидаете xyzw

  • Сравнение версий и порядок сортировки, при котором версии сортируются сначала по основным, а затем по второстепенным, затем строительным, а затем ревизионным версиям, как и следовало ожидать большинству из нас. То есть 1.2.5 позже, чем 1.2.3.7.

    Поэтому, если вы стилизуете строку версии как 1.2.6.4 и хотите, чтобы она считалась более новой, чем 1.2.5.8, не переключайте порядок частей в конструкторе Version.

Короче говоря - хотя слова major/minor/build/revision могут дать представление о том, какое число следует увеличить с учетом количества изменений, терминология очень мало влияет на то, как на самом деле используется класс. Форматирование и сортировка - вот что важно.