Компиляция даты и времени

Есть ли какой-нибудь умный способ получения даты и времени создания/компиляции dll?

Im использую нумерацию и отражение версии сборки для извлечения и отображения этой информации при развертывании приложения. Но в некоторых сценариях было бы более удобно знать, когда dll был фактически скомпилирован, а не автоматически увеличивая номер версии. Я не думаю, что измененная дата в самом файле dll надежна из-за способа развертывания приложения.

Dim assemblies = AppDomain.CurrentDomain.GetAssemblies
Dim assemblyName As String
Dim assemblyVersion As String

For Each assembly In assemblies
  assemblyName = assembly.GetName.Name.ToString
  assemblyVersion = assembly.GetName.Version.ToString
  ' How to get the date/time of the build??
  ' ...
Next

Любые предложения?

Ответы

Ответ 1

Если вы установите версию сборки (обычно в AssemblyInfo.cs) на Major.Minor.* (например, 1.0.*), то вы, вероятно, можете получить дату сборки во время выполнения с помощью следующего:

var version = Assembly.GetExecutingAssembly().GetName().Version;
DateTime buildDate = new DateTime(2000, 1, 1)
    .AddDays(version.Build)
    .AddSeconds(version.Revision*2);

При использовании * для третьей и четвертой части версии сборки эти две части автоматически устанавливаются во время компиляции со следующими значениями:

  • Третья часть - количество дней с 2000-01-01
  • Четвертая часть - это количество секунд с полуночи, разделенное на два (хотя некоторые страницы MSDN говорят, что это случайное число)

О, и вы должны сами заботиться о летнее время (например, добавить один час, если это летнее время).

Ответ 2

Как насчет:

new FileInfo(Assembly.GetExecutingAssembly().Location).CreationTime;