問題は、ファイル名ではないGetLastWriteTime
ものを使用して呼び出したということです。印刷すると、私が何を意味するのかがわかります。Assembly.GetExecutingAssembly().GetName().ToString()
のドキュメントでFile.GetLastWriteTime
は、これを具体的に呼び出しています。
パスパラメータに記述されているファイルが存在しない場合、このメソッドは、現地時間に調整された1601 AD(CE)協定世界時(UTC)の1月1日深夜12:00を返します。
したがって、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
、それは人生です:(