Heim >Backend-Entwicklung >C++ >Wie kann ich das Erstellungsdatum einer ausführbaren .NET-Datei programmgesteuert abrufen?
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!