![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Автоматическая генерация номеров сборки: секреты Delphi XE2 для надежной версионизацииDelphi , Программа и Интерфейс , IDE и КомпиляторВ последних версиях Delphi, начиная с XE2, была введена новая функция автоматической генерации номеров сборки, которая использует значения, основанные на текущей дате и времени. Так, например, номер сборки может выглядеть следующим образом: 2.4.4386.838. Здесь первые две цифры (Major и Minor) задаются пользователем, третья (Release) представляет собой количество дней, прошедших с 1 января 2000 года, а последняя (Build) - количество секунд с полуночи того же дня. Эта схема генерации номеров сборки напоминает подход, используемый в .NET, где последняя цифра (Build) также соответствует количеству секунд с полуночи, но деленному на два. Это позволяет более точно отслеживать время компиляции и избавляет от необходимости использования плагинов IDE или хакерства с заголовками PE. Вопрос, который возник у разработчиков, заключается в следующем: действительно ли Delphi XE2 использует указанную выше схему, начиная отсчет с 1 января 2000 года и добавляя количество дней и секунд в номера Release и Build? Подтвержденный ответИсследования показали, что схема кодирования номеров сборки не соответствует ожиданиям. Номера Release и Build упакованы в 32-битное слово DWORD, что означает ограничение в 16 бит для всех секунд в сутках. Поскольку в сутках 86400 секунд, что превышает значение 2^16, реализация Delphi начинает циклически повторяться примерно каждые 18.2 часа. Это приводит к тому, что автоматическая генерация номеров сборки не будет монотонно возрастающей с течением времени, не будет уникальной и так далее. Был выявлен баг в Delphi XE2, обновление 3, который не присутствовал в предыдущих версиях. Этот баг был зафиксирован в базе отчетов о проблемах Embarcadero (QC #102343). Альтернативный ответРазработчики могут самостоятельно настроить автоматическую генерацию номеров сборки, используя старый метод автоматического увеличения, если им это необходимо. Это может быть достигнуто с помощью собственных скриптов или инструментов сборки, таких как ВыводАвтоматическая генерация номеров сборки в Delphi XE2 представляет собой полезную функцию, однако она требует внимания к деталям, таким как возможные ошибки в реализации и ограничения, связанные с использованием 32-битных слов. Разработчикам следует учитывать эти особенности при работе с функцией автоматической генерации номеров сборки и, при необходимости, использовать альтернативные методы для достижения нужного поведения. Пример кода на Object Pascal для создания пользовательского скрипта генерации номеров сборки:
Этот код можно использовать в качестве отправной точки для создания более сложных скриптов, которые будут удовлетворять конкретным требованиям разработчиков. Обсуждается особенность автоматической генерации номеров сборки в Delphi XE2 и выявленные проблемы с реализацией этой функции. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: IDE и Компилятор ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |