确定应用程序的构建日期对于用户判断他们是否拥有最新版本至关重要。虽然显示构建编号很常见,但它通常提供的信息很少。本文探讨了以编程方式提取构建日期并以用户友好的格式显示它的方法。
与构建编号不同,没有直接的方法可以从程序集元数据中检索构建日期。但是,一种可靠的方法是提取嵌入到可执行文件的 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中文网其他相关文章!