사용자가 최신 버전을 가지고 있는지 확인하려면 애플리케이션의 빌드 날짜를 확인하는 것이 중요합니다. 빌드 번호를 표시하는 것이 일반적이지만 일반적으로 정보를 거의 제공하지 않습니다. 이 문서에서는 프로그래밍 방식으로 빌드 날짜를 추출하고 이를 사용자에게 친숙한 형식으로 표시하는 방법을 살펴봅니다.
빌드 번호와 달리 어셈블리 메타데이터에서 빌드 날짜를 검색할 수 있는 직접적인 방법은 없습니다. 그러나 신뢰할 수 있는 방법은 실행 파일의 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 1.1 이후에는 제대로 작동하지 않습니다. 추출된 링커 타임스탬프는 1900-2020 범위의 임의 연도를 제공합니다.
위 내용은 내 애플리케이션의 빌드 날짜를 프로그래밍 방식으로 표시하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!