Mengekstrak Tarikh Binaan daripada .NET Executables
Menentukan tarikh binaan boleh laku .NET secara pengaturcaraan boleh menjadi rumit, kerana kebanyakan pembangun hanya mempunyai akses kepada nombor binaan. Artikel ini memperincikan kaedah yang mantap untuk mendapatkan semula maklumat ini menggunakan C#, memanfaatkan cap waktu terbenam pengepala PE.
Memanfaatkan Cap Masa Pengepala PE
Pengepala PE (Portable Executable) menyimpan cap masa yang menggambarkan masa pautan boleh laksana. Kod C# Joe Spivey menyediakan cara yang mudah untuk mengakses ini:
<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>
Contoh penggunaan:
<code class="language-csharp">DateTime buildDate = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
Pertimbangan Penting: Walaupun berkesan untuk .NET Core 1.0, ketepatan pendekatan ini mungkin terjejas dalam versi .NET Core (1.1 dan seterusnya) disebabkan kemungkinan perubahan format pengepala PE.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Tarikh Binaan .NET Boleh Laksanakan secara Pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!