以用户友好的方式显示构建日期
在显示应用程序的构建详细信息时,以用户易于理解的格式呈现至关重要。大多数用户不太关心构建编号,更想知道他们是否拥有最新版本。
查询构建编号与日期
虽然使用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中文网其他相关文章!