.NET 実行可能ファイルからビルド日を抽出する
多くの開発者はビルド番号にしかアクセスできないため、.NET 実行可能ファイルのビルド日をプログラムで判断するのは難しい場合があります。 この記事では、PE ヘッダーの埋め込みタイムスタンプを活用し、C# を使用してこの情報を取得する堅牢な方法について詳しく説明します。
PE ヘッダーのタイムスタンプの活用
PE (Portable Executable) ヘッダーには、実行可能ファイルのリンク時間を反映するタイムスタンプが保存されます。 Joe Spivey の C# コードは、これにアクセスする便利な方法を提供します:
<code class="language-csharp">public static DateTime GetLinkerTime(this Assembly assembly, TimeZoneInfo target = null) { string filePath = assembly.Location; const int c_PeHeaderOffset = 60; const int c_LinkerTimestampOffset = 8; byte[] buffer = new byte[2048]; using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) stream.Read(buffer, 0, 2048); int offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset); int secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset); DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); DateTime linkTimeUtc = epoch.AddSeconds(secondsSince1970); TimeZoneInfo tz = target ?? TimeZoneInfo.Local; DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(linkTimeUtc, tz); return localTime; }</code>
使用例:
<code class="language-csharp">DateTime buildDate = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
重要な考慮事項: このアプローチは .NET Core 1.0 では有効ですが、.NET Core の以降のバージョン (1.1 以降) では、PE ヘッダー形式が変更される可能性があるため、精度が損なわれる可能性があります。
以上が.NET 実行可能ファイルのビルド日をプログラムで取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。