Связаны ли новые автоматически сгенерированные номера сборки Delphi XE2 с 1.1.2000 00:00:00? - PullRequest
5 голосов
/ 04 января 2012

В Delphi XE2 автоматически сгенерированная функциональность номеров сборок теперь использует некие сгенерированные значения даты и времени, например:

2.4.4386.838

Последние два числа меняются каждый раз, когда вы строите, и основаны на текущей дате и времени:

Major = 2 (user defined)
Minor = 4 (user defined)
Release = 4386 (number of days since Jan 1 2000)
Build = 838 (number of seconds since 00:00:00)

Полагаю, этот новый формат номеров релизов и сборок был заимствован из реализации .NET, которая делает что-то очень похожее. В .net последнее число (Build) равно количеству секунд с полуночи по местному времени, разделенному на 2. Подробнее о реализации .net см. По этой ссылке: Определение даты сборки трудным путем

Если на это можно положиться, чтобы остаться таким, то теперь у нас есть лучший способ определить время компиляции вместо

  1. Использование плагинов IDE

  2. Использование хаков PE PE

Вопрос не в том, как вернуться к старой функциональности номеров версий автоинкремента.

Вопросы - это действительно ли XE2 использует дату и время, как я показал выше, начиная с 1 января 2010 года и добавляя дни и секунды в числах сборки и выпуска?

1 Ответ

7 голосов
/ 04 января 2012

Кодировка не может быть такой, как вы думаете. Релиз и номера упакованы в один 32-битный DWORD. Это означает, что для всех секунд дня доступно только 16 бит. В дне 86400 секунд, что больше 2 16 .

Довольно странно, что реализация Delphi оборачивается, когда достигает 2 16 секунд, ~ 18,2 часа. Итак, в данный момент это 22:50 в моем часовом поясе (UTC), но автоматически сгенерированный номер выпуска - 16753, или около 4,6 часа. Добавьте обратно пропущенные 18,2 часа из бинго, это 22:50.

Похоже, что люди Visual Studio поняли это правильно, потому что они взяли количество секунд после 00:00 и поделили на 2. Следовательно, также может показаться, что автоматически сгенерированные номера релизов Delphi не будут монотонно увеличиваться со временем, не будет уникальным и т. д.

Мне кажется, что это ошибка, которую я отправил как QC # 102343 . Обратите внимание, что ошибка была введена в обновлении XE2 3. В предыдущих версиях она отсутствовала. Также обратите внимание, что обработка номера выпуска изменилась с обновления 2 на обновление 3.

...