Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автоматическая генерация номеров сборки: секреты 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).

Альтернативный ответ

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

Вывод

Автоматическая генерация номеров сборки в Delphi XE2 представляет собой полезную функцию, однако она требует внимания к деталям, таким как возможные ошибки в реализации и ограничения, связанные с использованием 32-битных слов. Разработчикам следует учитывать эти особенности при работе с функцией автоматической генерации номеров сборки и, при необходимости, использовать альтернативные методы для достижения нужного поведения.

Пример кода на Object Pascal для создания пользовательского скрипта генерации номеров сборки:

program GenerateBuildNumber;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  CurrentDateTime: TDateTime;
  BuildNumber: Int64;

begin
  CurrentDateTime := Now;
  BuildNumber := (CurrentDateTime - DateTime(2000, 1, 1)) * 24 * 60 * 60; // Количество секунд с 1 января 2000 года
  Writeln('Build Number: ', BuildNumber);
  Readln;
end.

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

Создано по материалам из источника по ссылке.

Обсуждается особенность автоматической генерации номеров сборки в Delphi XE2 и выявленные проблемы с реализацией этой функции.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: IDE и Компилятор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-17 05:37:02/0.0033948421478271/0