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は、これを具体的に呼び出しています。

パスパラメータに記述されているファイルが存在しない場合、このメソッドは、現地時間に調整された1601 AD(CE)協定世界時(UTC)の1月1日深夜12:00を返します。

したがって、Application.ExecutablePathClayの提案に従って使用するか、特定のアセンブリに(または、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

これは機能します:

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 に答える