Heim >Backend-Entwicklung >C++ >Wie kann ich das Erstellungsdatum einer ausführbaren .NET-Datei programmgesteuert abrufen?

Wie kann ich das Erstellungsdatum einer ausführbaren .NET-Datei programmgesteuert abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-22 01:07:09572Durchsuche

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

Extrahieren des Erstellungsdatums aus ausführbaren .NET-Dateien

Das programmgesteuerte Ermitteln des Erstellungsdatums einer ausführbaren .NET-Datei kann schwierig sein, da viele Entwickler nur Zugriff auf die Build-Nummer haben. In diesem Artikel wird eine robuste Methode zum Abrufen dieser Informationen mit C# beschrieben, die den eingebetteten Zeitstempel des PE-Headers nutzt.

Nutzung des PE-Header-Zeitstempels

Der PE-Header (Portable Executable) speichert einen Zeitstempel, der die Linkzeit der ausführbaren Datei widerspiegelt. Der C#-Code von Joe Spivey bietet eine bequeme Möglichkeit, darauf zuzugreifen:

<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>

Beispielverwendung:

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

Wichtige Überlegung: Obwohl dieser Ansatz für .NET Core 1.0 effektiv ist, kann die Genauigkeit dieses Ansatzes in späteren .NET Core-Versionen (1.1 und höher) aufgrund möglicher Änderungen des PE-Header-Formats beeinträchtigt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich das Erstellungsdatum einer ausführbaren .NET-Datei programmgesteuert abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn