Extraction de la date de construction des exécutables .NET
Déterminer par programmation la date de build d'un exécutable .NET peut être délicat, car de nombreux développeurs n'ont accès qu'au numéro de build. Cet article détaille une méthode robuste pour récupérer ces informations à l'aide de C#, en tirant parti de l'horodatage intégré de l'en-tête PE.
Exploiter l'horodatage de l'en-tête PE
L'en-tête PE (Portable Executable) stocke un horodatage reflétant l'heure de liaison de l'exécutable. Le code C# de Joe Spivey offre un moyen pratique d'y accéder :
<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>
Exemple d'utilisation :
<code class="language-csharp">DateTime buildDate = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
Considération importante : Bien qu'elle soit efficace pour .NET Core 1.0, la précision de cette approche peut être compromise dans les versions ultérieures de .NET Core (1.1 et ultérieures) en raison de modifications potentielles du format d'en-tête PE.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!