Maison >développement back-end >C++ >Comment puis-je obtenir par programme la date de construction d'un exécutable .NET ?

Comment puis-je obtenir par programme la date de construction d'un exécutable .NET ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 01:07:09611parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn