ユーザーフレンドリーな方法でビルド日付を表示します
アプリケーションのビルドの詳細を表示するときは、ユーザーが理解しやすい形式で表示することが重要です。ほとんどのユーザーは、ビルド番号よりも、最新バージョンがあるかどうかを知ることに関心があります。
ビルド番号と日付のクエリ
Assembly.GetExecutingAssembly().GetName().Version.ToString()
を使用してビルド番号を直接取得することは可能ですが、ビルド日付を取得するには別のアプローチが必要です。
リンカーのタイムスタンプを取得します
ビルド日を確認する最も信頼できる方法は、実行可能ファイルの PE ヘッダーにあるリンカーのタイムスタンプを取得することです。このタイムスタンプは、実行可能ファイルがビルドされた時間を表します。
リンカーのタイムスタンプを抽出するための C# コード
Joe Spivey は、リンカーのタイムスタンプを抽出するための C# コード スニペットを提供しました:
<code class="language-csharp">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>
使用例
現地時間でビルド日を取得するには、次のコードを使用します:
<code class="language-csharp">var linkTimeLocal = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
.NET Core に関する説明
このメソッドは .NET Core 1.0 では機能しますが、.NET Core 1.1 以降は非推奨となり、誤った結果が生成される可能性があります。
以上がアプリケーションでビルド番号の代わりにわかりやすいビルド日を表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。