確定應用程式的建置日期對於使用者判斷他們是否擁有最新版本至關重要。雖然顯示建造編號很常見,但它通常提供的資訊很少。本文探討了以程式設計方式提取建置日期並以使用者友好的格式顯示它的方法。
與建構編號不同,沒有直接的方法可以從程式集元資料中檢索建置日期。但是,一種可靠的方法是提取嵌入到可執行檔的 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中文網其他相關文章!