ホームページ >バックエンド開発 >C++ >.NET 実行可能ファイルのビルド日をプログラムで取得するにはどうすればよいですか?

.NET 実行可能ファイルのビルド日をプログラムで取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-22 01:07:09569ブラウズ

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

.NET 実行可能ファイルからビルド日を抽出する

多くの開発者はビルド番号にしかアクセスできないため、.NET 実行可能ファイルのビルド日をプログラムで判断するのは難しい場合があります。 この記事では、PE ヘッダーの埋め込みタイムスタンプを活用し、C# を使用してこの情報を取得する堅牢な方法について詳しく説明します。

PE ヘッダーのタイムスタンプの活用

PE (Portable Executable) ヘッダーには、実行可能ファイルのリンク時間を反映するタイムスタンプが保存されます。 Joe Spivey の C# コードは、これにアクセスする便利な方法を提供します:

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

使用例:

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

重要な考慮事項: このアプローチは .NET Core 1.0 では有効ですが、.NET Core の以降のバージョン (1.1 以降) では、PE ヘッダー形式が変更される可能性があるため、精度が損なわれる可能性があります。

以上が.NET 実行可能ファイルのビルド日をプログラムで取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。