.NET: большие номера редакций в AssemblyVersionAttribute

У нас есть соглашение о версиях наших сборок как [major]. [Minor]. [Micro]. [Revision], например 2.1.2.33546.

Наш сценарий сборки автоматически обновляет файл AssemblyInfo.cs, содержащий

[assembly: AssemblyVersion("x.y.z.w")]

чтобы встроить номер версии в сборку.

Но наш репозиторий Subversion только что достиг версии # 65535, что нарушило нашу сборку.

Оказывается, каждое число в номере версии имеет максимальное значение 65534 (вероятно, из-за ограничений Windows).

Вы столкнулись с этой проблемой? Какие-нибудь хорошие решения / обходные пути?

Нам нравится схема встраивания номера ревизии, и мы, очевидно, не можем просто сбросить наш Subversion-сервер :-)


person Rasmus Faber    schedule 27.07.2009    source источник


Ответы (4)


Еще немного справочной информации:

Почему номера сборки ограничено 65535?

Поскольку это вряд ли изменится, у вас есть следующие варианты:

  • Возьмите Revision Modulo 65535, что означает, что вы вернулись к 1
  • Используйте микрополе в номере версии, чтобы разделить номер версии, разделив ревизию на 1000. Это означает, что ваша версия может быть 1.0.65.535.
  • Не храните версию SVN в AssemblyVersion, а вместо этого в AssemblyInformationalVersion. Таким образом, ваше приложение по-прежнему может получить к нему доступ для отображения, хотя вы больше не можете использовать проводник Windows для быстрой проверки версии SVN.
  • Не сохраняйте версию SVN в AssemblyVersion, а вместо этого в полях AssemblyProduct или AssemblyDescription. Опять же, таким образом ваше приложение все еще может получить к нему доступ, но теперь он будет отображаться в проводнике в окне свойств.
person Michael Stum    schedule 27.07.2009
comment
Если вы поместите его в AssemblyInformationalVerison, вы сможете увидеть его в проводнике Windows в свойстве Product Version. Так что это хороший вариант. - person xagyg; 13.09.2013

Один из вариантов - просто использовать [AssemblyFileVersion]; это по-прежнему вызывает предупреждение, но, по крайней мере, будет построено:

[assembly: AssemblyFileVersion("1.0.0.80000")]
person Marc Gravell    schedule 27.07.2009
comment
Это было исправлено в более поздних версиях msbuild (4.0), и больше не выдает предупреждения. - person JoshSchlesinger; 27.01.2013

Мы решили использовать то же соглашение, и из-за ограничений номеров версий Windows мы решили отбросить «микро» часть наших номеров версий, чтобы сохранить номер редакции. Наши номера версий теперь [major].[minor].[revision / 10000].[revision % 10000], поэтому сборки, созданные из ревизии 65535, имеют версию 2.01.6.5535.

person Bradley Grainger    schedule 27.07.2009
comment
Мне нравится этот +1, как вы вставляете значение в AssemblyInfo.cs? - person Ray Hayes; 27.07.2009
comment
Убедитесь, что вы не используете незначительные обновления в установщике Windows, если вы это сделаете (т. Е. Обновление, которое позволяет избежать полного удаления / переустановки). Установщик Windows полностью проигнорирует компонент 4-й версии. Если вы больше не обновляете компонент 3-й версии вручную, чтобы отразить выпуски, установщик Windows может не обновить некоторые файлы. - person Wim Coenen; 27.07.2009
comment
@Ray Hayes: Наш сценарий сборки NAnt использует svn info . --xml для получения номера редакции рабочей копии, а затем вызывает специально написанную утилиту для вывода этой версии в файл SolutionInfo.cs, содержащий атрибут [AssemblyVersion]. Этот файл не добавляется в Subversion, но на него просто ссылаются все проекты (используйте «Добавить как ссылку» в VS) в решении, так что все они построены с номером последней версии. - person Bradley Grainger; 29.07.2009
comment
@wcoenen: Это очень хороший момент, о котором я забыл. Нам пришлось использовать [major].[minor].[revision].0 в качестве номера версии для наших пакетов MSI. Мы еще не достигли ревизии 65 536; когда мы это сделаем, нам, возможно, придется просто вернуться к 1 (и сохранить старший бит в младшем поле). Наша второстепенная версия в настоящее время 0, так что у нас есть место для дополнительной информации. - person Bradley Grainger; 29.07.2009

Согласно MSDN, компоненты AssemblyVersionAttribute, номер версии которого вы можете ограничить UInt16.MaxValue - 1, т. Не храните большие числа в файле сборки. Версия файла, как предлагает Марк Грейвелл, может быть вам достаточно, в зависимости от того, кто прочитает номер вашей версии.

person OregonGhost    schedule 27.07.2009