アプリケーションのビルド日を特定することは、ユーザーが最新バージョンかどうかを判断するために重要です。ビルド番号を表示するのは一般的ですが、通常はほとんど情報が得られません。この記事では、プログラムでビルド日付を抽出し、使いやすい形式で表示する方法について説明します。
ビルド番号とは異なり、アセンブリ メタデータからビルド日付を直接取得する方法はありません。ただし、信頼できる方法は、実行可能ファイルの PE ヘッダーに埋め込まれているリンカーのタイムスタンプを抽出することです。次の C# コードは、この手法を示しています。
<code class="language-c#">public static DateTime GetLinkerTime(this Assembly assembly, TimeZoneInfo target = null) { var filePath = assembly.Location; const int c_PeHeaderOffset = 60; const int c_LinkerTimestampOffset = 8; var buffer = new byte[2048]; using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) stream.Read(buffer, 0, 2048); var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset); var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset); var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); var linkTimeUtc = epoch.AddSeconds(secondsSince1970); var tz = target ?? TimeZoneInfo.Local; var localTime = TimeZoneInfo.ConvertTimeFromUtc(linkTimeUtc, tz); return localTime; }</code>
このメソッドを使用するには、実行中のアセンブリで GetLinkerTime() を呼び出すだけです。
<code class="language-c#">var linkTimeLocal = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
このメソッドは .NET Core 1.1 以降では正しく機能しないことに注意してください。 抽出されたリンカーのタイムスタンプは、1900 年から 2020 年の範囲のランダムな年を提供します。
以上がアプリケーションのビルド日をプログラムで表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。