如何获取应用程序的上次写入或构建时间?

时间:2012-07-18 16:02:30

标签: c# .net winforms file datetime

  

可能重复:
  How can I display the Build number and/or DateTime of last build in my app?

我想将我的应用程序构建时的最后一个DateTime追加到标题栏。但是这段代码:

DateTime lastWriteTime = File.GetLastWriteTime(Assembly.GetExecutingAssembly().GetName().ToString());
this.Text = String.Format("Platypi R Us; Built on {0}", lastWriteTime);
...... p ... 400多年前(1600年)的声称;我发现这不太可能。

3 个答案:

答案 0 :(得分:2)

问题是您使用不是文件名的内容调用了GetLastWriteTime。打印出Assembly.GetExecutingAssembly().GetName().ToString(),你会看到我的意思。

documentation for File.GetLastWriteTime具体说明了这一点:

  

如果path参数中描述的文件不存在,则此方法返回美国俄勒冈州公元1601年1月1日午夜12点,协调世界时(UTC),调整为当地时间。

所以,要么根据Clay的建议使用Application.ExecutablePath,要么使用特定的程序集(或者为了避免WinForms依赖),你可以使用Application.ManifestModule并获取FullyQualifiedName,就像这样:

using System;
using System.Reflection;

class Test
{
    static void Main()
    {
        string file = typeof(Test).Assembly
                                  .ManifestModule
                                  .FullyQualifiedName;
        Console.WriteLine(file);
        DateTime lastWriteTime = File.GetLastWriteTime(file);
        Console.WriteLine(lastWriteTime);
    }
}

当然,只获得包含程序集清单的模块的最后写入时间 - 可以使用多模块程序集。但这很少见,而且我的猜测是,这对你没问题。

遗憾的是不是嵌入Assembly内部的构建时间的概念,但这就是生命:(

答案 1 :(得分:1)

这有效:

FileInfo fileInfo = new FileInfo(Application.ExecutablePath);
DateTime lastWriteTime = fileInfo.LastWriteTime;
this.Text = String.Format("Platypi R Us; Built on {0}", lastWriteTime); 

答案 2 :(得分:1)

'GetName()'返回程序集的显示名称。你想要Assembly.Location

另外,我不确定这是否有效。如果将文件复制到其他位置,则文件时间与实际的上次构建时间不同步。也许每次推出新版本时手动更新它?