1

可能重复:
如何在我的应用程序中显示上次构建的内部版本号和/或日期时间?

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

DateTime lastWriteTime = File.GetLastWriteTime(Assembly.GetExecutingAssembly().GetName().ToString());
this.Text = String.Format("Platypi R Us; Built on {0}", lastWriteTime);

... 400 多年前(1600 年)的声明;我觉得不太可能。

4

3 回答 3

2

问题是您使用不是GetLastWriteTime文件名的东西进行了调用。打印出来,你会明白我的意思。Assembly.GetExecutingAssembly().GetName().ToString()

文档File.GetLastWriteTime特别指出了这一点:

如果 path 参数中描述的文件不存在,则此方法返回 1601 年 1 月 1 日午夜 12:00 (CE) 协调世界时 (UTC),调整为本地时间。

因此,无论Application.ExecutablePath是按照 Clay 的建议使用,还是针对特定程序集(或避免 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,但这就是生活:(

于 2012-07-18T16:15:02.123 回答
1

This works:

FileInfo fileInfo = new FileInfo(Application.ExecutablePath);
DateTime lastWriteTime = fileInfo.LastWriteTime;
this.Text = String.Format("Platypi R Us; Built on {0}", lastWriteTime); 
于 2012-07-18T16:09:04.343 回答
1

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

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

于 2012-07-18T16:12:51.890 回答