27.07.2014

C#: Получение даты сборки

К сожалению нет простого способа для получения даты выполнения билда .net-сборки, тем не менее наиболее точное значения можно получить с помощью заголовка PE-файла, в который при подликовке проставляется дата:
public static DateTime GetBuildDate()
{
   string filePath = Assembly.GetCallingAssembly().Location;
   const int peHeaderOffset = 60;
   const int linkerTimestampOffset = 8;
   byte[] b = new byte[2048];
   using (Stream s = new FileStream(filePath, FileMode.Open, FileAccess.Read))
   {
      s.Read(b, 0, 2048);
   }

   int secondsSince1970 = BitConverter.ToInt32(b, BitConverter.ToInt32(b, peHeaderOffset) + linkerTimestampOffset);
   DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0);
   dt = dt.AddSeconds(secondsSince1970);
   dt = dt.AddHours(TimeZone.CurrentTimeZone.GetUtcOffset(dt).Hours);
   return dt;
}

Комментариев нет:

Отправить комментарий