>백엔드 개발 >C++ >내 애플리케이션의 빌드 날짜를 프로그래밍 방식으로 표시하려면 어떻게 해야 합니까?

내 애플리케이션의 빌드 날짜를 프로그래밍 방식으로 표시하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-22 01:16:09997검색

How Can I Programmatically Display My Application's Build Date?

제작 날짜 표시: 전체 가이드

사용자가 최신 버전을 가지고 있는지 확인하려면 애플리케이션의 빌드 날짜를 확인하는 것이 중요합니다. 빌드 번호를 표시하는 것이 일반적이지만 일반적으로 정보를 거의 제공하지 않습니다. 이 문서에서는 프로그래밍 방식으로 빌드 날짜를 추출하고 이를 사용자에게 친숙한 형식으로 표시하는 방법을 살펴봅니다.

빌드 날짜 확인

빌드 번호와 달리 어셈블리 메타데이터에서 빌드 날짜를 검색할 수 있는 직접적인 방법은 없습니다. 그러나 신뢰할 수 있는 방법은 실행 파일의 PE 헤더에 포함된 링커 타임스탬프를 추출하는 것입니다. 다음 C# 코드는 이 기술을 보여줍니다.

<code class="language-c#">public static DateTime GetLinkerTime(this Assembly assembly, TimeZoneInfo target = null)
{
    var filePath = assembly.Location;
    const int c_PeHeaderOffset = 60;
    const int c_LinkerTimestampOffset = 8;

    var buffer = new byte[2048];

    using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        stream.Read(buffer, 0, 2048);

    var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset);
    var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset);
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    var linkTimeUtc = epoch.AddSeconds(secondsSince1970);

    var tz = target ?? TimeZoneInfo.Local;
    var localTime = TimeZoneInfo.ConvertTimeFromUtc(linkTimeUtc, tz);

    return localTime;
}</code>

사용예

이 방법을 사용하려면 실행 중인 어셈블리에서 GetLinkerTime()을 호출하면 됩니다.

<code class="language-c#">var linkTimeLocal = Assembly.GetExecutingAssembly().GetLinkerTime();</code>

.NET Core에 대한 지침

이 방법은 .NET Core 1.1 이후에는 제대로 작동하지 않습니다. 추출된 링커 타임스탬프는 1900-2020 범위의 임의 연도를 제공합니다.

위 내용은 내 애플리케이션의 빌드 날짜를 프로그래밍 방식으로 표시하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.