5

在 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 实现的详细信息,请参阅此链接:Determining Build Date the hard way

如果可以依靠这种方式保持这种状态,那么现在我们有一个更好的方法来确定编译时间,而不是

  1. 使用 IDE 插件

  2. 使用 PE 标头技巧

问题不在于如何返回旧的自动增量版本号功能。

问题XE2 是否真的使用我上面显示的日期和时间,从 2010 年 1 月 1 日开始,并在 Build 和 Release 数字中添加天数和秒数?

4

1 回答 1

7

编码不能是您认为的那样。版本和编号被打包成一个 32 位DWORD。这意味着一天中的所有秒数只有 16 位可用。一天有 86400 秒,大于 2 16

相当奇怪的是,Delphi 实现在达到 2 16秒(约 18.2 小时)时似乎会回绕。所以目前,在我的时区 (UTC) 中是 22:50,但自动生成的版本号是 16753,或大约 4.6 小时。加上回绕和宾果游戏中缺少的 18.2 小时,现在是 22:50。

看起来 Visual Studio 的人做对了,因为他们将 00:00 之后的秒数除以 2。因此,Delphi 自动生成的版本号似乎不会随着时间单调增加,不会独特的等等。

在我看来,这似乎是我作为QC#102343提交的错误。请注意,该错误是在 XE2 更新 3 中引入的。它在以前的版本中不存在。另请注意,版本号的处理已从更新 2 更改为更新 3。

于 2012-01-03T22:53:48.733 回答