问题是您使用不是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
,但这就是生活:(