スポンサーサイト

(--/--/-- --:--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【 permalink 】 | | page top↑ | edit
(C#) ビルド時にアセンブリに自動で設定されるバージョン番号について。

(2010/01/16 19:02)

C# で、AssemblyInfo.cs

[assembly: AssemblyVersion("1.0.*")]

などと書いておくと、ビルド時に設定されるアセンブリのバージョン番号として、ビルド番号とリビジョン番号が自動で採番されますが、この時設定される値の算出方法が気になったので、調べてみました。

まず、AssemblyVersionAttribute クラス のリファレンスに、

既定のビルド番号は、日単位でインクリメントされます。既定のリビジョン番号はランダムな値になります。

と書いてあるのを見つけましたが、「ランダム」というのは、説明が面倒くさい場合の大人のうそである臭いがします。少なくとも、本当にランダムならば単調増加しません。

次に、アセンブリ リンカ (Al.exe) のリファレンスに以下の記述を見つけましたが、

majorminor を指定する場合、build に対してアスタリスク (*) を指定できます。その場合は、build が現地時間 2000 年 1 月 1 日以降の経過日数と等しい値になり、revision が現地時間 2000 年 1 月 1 日午前 0 時以降の経過秒数を 2 で割った値と等しくなります。

この記述(「revision が現地時間 2000 年 1 月 1 日午前 0 時以降の経過秒数を…」)のとおりだった場合に、リビジョン番号が半端なく大きな数値になってしまうので、疑念の余地があります。

そこで、Assembly Linker (Al.exe) の英語版リファレンスを参照したところ、

If you specify major and minor, you can specify an asterisk (*)for build. This causes build to be equal to the number of days since January 1, 2000, local time, and revision to be equal to the number of seconds since midnight, local time, divided by 2.

との記述があり、日本語版の訳が間違っていたことがわかりました。

# 2010/01/17 追記。アセンブリ リンカ (Al.exe) のVS2010用のリファレンスを参照したところ、現時点ではベータ版用の機械翻訳のため日本語としてはぐだぐだでしたが、一応正しい内容になっていました。


というわけで、アセンブリに設定されるバージョン番号の規定値として、

  • ビルド番号は、現地時間で、2000年1月1日からの経過日数
  • リビジョン番号は、現地時間で、その日の午前0時からの経過秒数を2で割った値

となることがわかりましたとさ。

【 permalink 】 | csharp | トラックバック(0) | コメント(0) | page top↑ | edit
<<Excelの各シートが記憶しているプリンタ依存の設定(両面印刷など)をデフォルトに戻すには。 | ホーム | うわさの名著「Java並行処理プログラミング」が復刊していた件。>>
コメント

※コメント大歓迎です。いただいたコメントに対してこちらから返答することは原則ありませんが、必要な場合には記事本文で回答します。

コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://0xc000013a.blog96.fc2.com/tb.php/151-7ba66514
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。