可能重复:
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年)的声称;我发现这不太可能。
答案 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
另外,我不确定这是否有效。如果将文件复制到其他位置,则文件时间与实际的上次构建时间不同步。也许每次推出新版本时手动更新它?