Каков наилучший способ использования атрибутов управления версиями сборки?
AssemblyVersion и AssemblyFileVersion атрибуты - это встроенный способ обработки номеров версий для сборников .NET. В то время как структура обеспечивает возможность автоматически определять наименее значимые части номера версии (сборка и ревизия в терминах Microsoft), я нахожу метод для этого довольно слабым и, несомненно, имеет много других.
Итак, я хотел бы спросить, какие способы были определены, чтобы лучше всего использовать номера версий, которые лучше отражают фактическую версию проекта? У вас есть pre-build script, который устанавливает часть версии в дату и время или версию репозитория для вашей рабочей копии проекта? Вы просто используете автоматическое поколение, предоставляемое каркасом? Или что-то другое? Какой лучший способ управлять версиями сборки/файла?
Ответы
Ответ 1
В моем текущем проекте мы используем номер ревизии Subversion как наименее значимую (строчную) часть номера версии, и мы используем Nant script для создания файла AssemblyInfo проекта. Мы используем тот же номер версии для атрибутов AssemblyVersion и AssemblyFileVersion. (Остальные три части - major.minor.point, где major.minor будет увеличиваться каждый раз при изменении схемы базы данных, а точка увеличивается для каждой версии.)
Мы начали с того, что номер сборки просто увеличился, но это потребовало проверки файла версии для каждой сборки и вызвало конфликты при слиянии. Когда это оказалось неработоспособным, мы начали использовать CruiseControl.NET для генерации номера сборки, но это затрудняло воспроизведение отдельных сборок вручную. В конце концов мы перешли к текущей схеме (Subversion-revision).
Примечание. К сожалению, с .NET невозможно полностью воссоздать сборку из прошлой версии, поскольку компиляторы .NET кодируют текущую временную метку в объектный файл при компиляции. Каждый раз, когда вы компилируете один и тот же код, вы получаете другой объектный файл.
Ответ 2
Здесь я вижу много сообщений об использовании номера ревизии subversion в качестве компонента версии сборки. Остерегайтесь: 4 номера версии, доступные в окнах (abcd), ограничены 16 бит (макс = 65535). Номер версии подверсии может легко превысить этот предел, особенно если вы размещаете несколько проектов в одном и том же хранилище.
Ответ 3
На предыдущем задании, в котором мы использовали Subversion, у меня был nant script, который запускал ccnet для извлечения версии репозитория и использовал это как окончательный номер.
На этом задании мы используем VSS (shutter), поэтому на самом деле это не вариант, поэтому мы можем обновить его вручную, со следующими рекомендациями:
- Основные: значимые ( > 25%) изменения или дополнения в функциональности или интерфейсе.
- Малый: небольшие изменения или дополнения в функциональности или интерфейсе.
- Сборка: незначительные изменения, которые нарушают интерфейс.
- Редакция: исправления для сборки, которые не меняют интерфейс.
Мы также сохраняем сборки и версии файлов синхронно. Версия Assembly может быть легко прочитана программно, в то время как версия файла может отображаться в виде столбца в режиме сведений в проводнике Windows.
Ответ 4
Наши скрипты сборки вводят номер набора изменений из TFS в версию. Таким образом, мы точно знаем, что проверок в сборке.
Ответ 5
У нас есть сервер сборки CruiseControl.NET, вставляющий номер списка изменений perforce в AssemblyFileVersion
- это позволяет нам отследить исходный код для любой сборки, построенной сервером сборки. (Мы всегда строим из основной ветки.)
Для сборок, на которые будут ссылаться клиенты, мы оставляем константу AssemblyVersion
, если не произошли нарушения, и в этом случае мы увеличиваем версию, чтобы код клиента был перестроен против новой версии.
Ответ 6
Мы используем управление версиями из подрывной программы и обновляем информацию о сборке, чтобы скрипты обновляли информацию, поэтому проверки версий контролируют управление версиями.
Ответ 7
Мы склонны встраивать дату выпуска (или сборки) в сборку. Например, если построено сегодня версия будет "2008.10.06" (сборка script обновляет ее).
Ответ 8
Атрибут AssemblyVersionAttribute является частью идентификатора сборки. Изменение означает, что это другая сборка, и программы, связанные с этой сборкой, необходимо перекомпилировать/связать или применить политику версии. Мы не обнаружили, что apealing, поэтому мы решили только увеличить AssemblyFileVersion для каждого исправления и только изменить AssemblyVersion для каждой основной версии. Мы осознаем, что это решение возвращает часть адской версии win32. Мы увеличиваем AssemblyFileVersion для каждой сборки и метки/тега системы управления версиями с этой версией, чтобы мы знали, из какого источника пришел двоичный файл.