新的 Delphi XE2 自动生成的内部版本号是不是链接到 1.1.2000 00:00:00?
Posted
技术标签:
【中文标题】新的 Delphi XE2 自动生成的内部版本号是不是链接到 1.1.2000 00:00:00?【英文标题】:Are the new Delphi XE2 autogenerated build numbers linked to 1.1.2000 00:00:00?新的 Delphi XE2 自动生成的内部版本号是否链接到 1.1.2000 00:00:00? 【发布时间】:2012-02-01 21:58:57 【问题描述】:在 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
如果可以依靠它保持这种状态,那么现在我们有一个更好的方法来确定编译时间,而不是
使用 IDE 插件
使用 PE 标头技巧
问题不是如何返回旧的自动递增版本号功能。
问题是 XE2 是否真的使用我上面显示的日期和时间,从 2010 年 1 月 1 日开始并在 Build 和 Release 数字中添加日期和秒数?
【问题讨论】:
您正在寻找的答案可以在 TOndrej 的答案中找到:***.com/questions/8437300/… @David 尖锐的问题是关于如何自己做。我的问题是 Delphi XE2 现在是否正在为我们做这件事,我们应该摆脱你所指出的问题中确切提到的建议。我相信我的问题有点不同。 我想我不明白你问题的主旨。你认为从版本资源中支持它更容易吗?看不到任何说明如何设置 Build 和 Release 的文档?您大概已经通过观察发现了这一点?你知道使用什么时区吗?世界标准时间?当地时间? 如果您希望“Embarcadero 开发人员”回答问题,您可能应该在 Embarcadero 论坛 中提问。所以你基本上在这里说的是你的整个问题是基于一个关于内部版本号包含的可能或可能不是实际事实的假设?抱歉,但投票结束时“不是一个真正的问题”。 @Warren - 我已经准确地询问了我需要问的问题并得到了令人满意的答案。我不需要旧功能。而且我从不喜欢华丽的 Borland 论坛——相反,我对 Allen Bauer 和 David Heffernan 以及codinghorror.com 深表敬意。我从 SO 那里得到了我所需要的东西——我的问题的答案。现在您可以随意关闭、审核、删除、否决它。 【参考方案1】:编码不可能是你想象的那样。版本和编号被打包到一个 32 位 DWORD
中。这意味着一天中的所有秒数只有 16 位可用。一天有86400秒大于216。
奇怪的是,Delphi 实现在达到 216 秒(约 18.2 小时)时似乎会回绕。所以目前,在我的时区 (UTC) 中是 22:50,但自动生成的版本号是 16753,或大约 4.6 小时。加上回绕和宾果游戏中缺少的 18.2 小时,现在是 22:50。
看起来 Visual Studio 的人做对了,因为他们将 00:00 之后的秒数除以 2。因此看起来 Delphi 自动生成的版本号不会随时间单调增加,不会是唯一的等等。
在我看来,这似乎是我以QC#102343 提交的错误。请注意,该错误是在 XE2 更新 3 中引入的。它在以前的版本中不存在。另请注意,版本号的处理已从更新 2 更改为更新 3。
【讨论】:
它应该是(自午夜以来的秒数)div 2。这使得最大值为 43200,它确实适合 16 位。如果它正在包装,那肯定是一个错误。 @Allen 嗯,如您所见,我的快速试用看起来像是在包装。我需要提交 QC 还是可以从这里获取。 最好你提交它......然后你得到信用并可以跟踪它。 哦,在人们对 (OMG) 仅 2 秒的解决方案感到恐慌之前!...请想想...谁可以构建,做出改变, 2 秒内重新构建? @allen 但如果有任何工具可以编译速度足够快 2 秒周转,那就是 delphi !!!以上是关于新的 Delphi XE2 自动生成的内部版本号是不是链接到 1.1.2000 00:00:00?的主要内容,如果未能解决你的问题,请参考以下文章
Delphi XE2 编译ralease版本,无法添加UAC解决方法
如何在 Delphi XE2 中安装 TMS Component Pack 6.0?