C# 编译日期和时间

C# 编译日期和时间,c#,.net,vb.net,reflection,C#,.net,Vb.net,Reflection,是否有一些聪明的方法来获取dll构建/编译的日期和时间 部署应用程序时,我使用程序集版本编号和反射来检索和显示此信息。但在某些情况下,更方便的方法是知道dll实际编译的时间,而不是自动递增的版本号。由于应用程序的部署方式,我认为dll文件本身的修改日期不可靠 Dim assemblies = AppDomain.CurrentDomain.GetAssemblies Dim assemblyName As String Dim assemblyVersion As String For Eac

是否有一些聪明的方法来获取dll构建/编译的日期和时间

部署应用程序时,我使用程序集版本编号和反射来检索和显示此信息。但在某些情况下,更方便的方法是知道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

有什么建议吗?

如果您将程序集版本(通常在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以来的天数
  • 第四部分是从午夜开始的秒数除以2(尽管这是一个随机数)
哦,你必须自己注意夏令时(例如,如果是夏令时,则增加一小时)。

那么:

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

您可以通过以下方式获得:

File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location);

返回
DateTime
对象。

这不是一个好主意,因为它不稳定,很容易更改。例如,只需从某个FTP服务器下载一个文件并查看创建日期。您将获得在您的pc上创建文件的日期。千导致错误信息。如果您压缩、解压文件或通过邮件将其作为附件发送给某人,也可能发生这种情况(取决于您使用的程序)。在所有这些情况下,创建时间是一个很好的候选更改。那么上次修改的日期呢?是的,根据我的经验,修改的日期比创建的日期更准确(在创建后实际上没有进行修改的文件中)。