5

Delphi XE2 では、自動生成されたビルド番号機能が、次のような日付と時刻で生成された値を使用するようになりました。

2.4.4386.838

最後の 2 つの数字はビルドするたびに変わり、現在の日付と時刻に基づいています。

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 では、最後の数値 (ビルド) は、現地時間の午前 0 時からの秒数を 2 で割った値に等しくなります。.net 実装の詳細については、このリンクを参照してください: Determining Build Date the hard way

これがこの方法を維持するために信頼できる場合、コンパイル時間を決定するより良い方法があります。

  1. IDE プラグインの使用

  2. PE ヘッダー ハックの使用

問題は、古い自動インクリメント バージョン番号機能に戻る方法ではありません。

問題、2010 年 1 月 1 日から始まり、ビルド番号とリリース番号に日と秒を追加して、上で示したように XE2 が本当に日付と時刻を使用するかということです。

4

1 に答える 1

7

エンコーディングは、あなたが思っているものではありません。リリースと番号は、単一の 32 ビットにパックされますDWORD。つまり、1 日のすべての秒で 16 ビットしか使用できないということです。2 16より大きい 1 日は 86400 秒あります。

奇妙なことに、Delphi の実装は、2 16秒、つまり 18.2 時間に達するとラップアラウンドするように見えます。現時点では、私のタイム ゾーン (UTC) では 22:50 ですが、自動生成されたリリース番号は 16753、つまり約 4.6 時間です。ラップアラウンドとビンゴから失われた 18.2 時間を追加すると、22:50 になります。

00:00 の後の秒数を 2 で割ったため、Visual Studio の人々は正しく理解したようです。したがって、Delphi の自動生成されたリリース番号は、時間の経過とともに単調に増加しないように見えます。ユニークなど。

これは私がQC#102343として提出したバグのようです。このバグは XE2 update 3 で導入されたことに注意してください。以前のバージョンには存在しませんでした。また、リリース番号の扱いがアップデート 2 からアップデート 3 に変更されていることに注意してください。

于 2012-01-03T22:53:48.733 に答える