Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Tarikh Binaan .NET Boleh Laksanakan secara Pengaturcaraan?

Bagaimanakah Saya Boleh Mendapatkan Tarikh Binaan .NET Boleh Laksanakan secara Pengaturcaraan?

Mary-Kate Olsen
Lepaskan: 2025-01-22 01:07:09
asal
567 orang telah melayarinya

How Can I Programmatically Get the Build Date of a .NET Executable?

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>
Salin selepas log masuk

Contoh penggunaan:

<code class="language-csharp">DateTime buildDate = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan