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
Libérer: 2025-01-22 01:07:09
original
564 Les gens l'ont consulté

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>
Copier après la connexion

Exemple d'utilisation :

<code class="language-csharp">DateTime buildDate = Assembly.GetExecutingAssembly().GetLinkerTime();</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal