2009-07-09 70 views
4

我有一個關於框的C#WinForms應用程序。我正在使用的版本號大約在框中:把生成日期放在框中

FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location) 
    .FileVersion 

這最終會給我Subversion版本號,從中可執行文件構建。

我還想將日期的構建放入About框。我想:

File.GetLastWriteTime(Assembly.GetEntryAssembly().Location) 

但是,這給我的可執行文件,僅對應於當應用程序被安裝日期(我們使用ClickOnce)不的寫入日期。如何獲取生成日期

回答

5

如果使用自動版本,您可以將版本號的最後兩位轉換成構建日期:MSDN

+0

使您的版本號成爲基於日期的系統,通過持續集成設置,並在日期解析回來。 – DevelopingChris 2009-07-09 15:00:53

+0

msbuild/visual studio會爲你做這件事,閱讀鏈接文章的第一位。 – 2009-07-09 15:06:18

0

我能做到這一點在C/C++的唯一途徑是實際上有一個職位-build進程在二進制文件中執行搜索並替換分配爲「靜態常量」的特殊字符串。

雖然在c#中可能有一個更簡單的方法。

1

你可以改變你的程序集版本來編碼日期,但這可能意味着失去你可以證明更有用的subversion版本信息。

這應該工作:寫當前的日期/時間爲cs文件作爲預生成的任務,像這樣:

[assembly: AssemblyCreated(CreatedDate = new DateTime(...))] 

你可以使用一個批處理文件,PowerShell腳本或可執行爲。

包括文件在您的項目(建設行動:編譯),包括自定義屬性:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)] 
public sealed class AssemblyCreatedAttribute : Attribute 
{ 
    public DateTime CreatedDate { get; set; } 
} 

在應用程序啓動,你可以使用反射來獲得從組件用於顯示自定義屬性在關於頁面。

+0

偉大而明確的例子,在它之後,唯一缺少的部分是如何使用反射來提取自定義屬性! :) – 2013-01-24 12:59:14

0

我不認爲有這樣做的標準方式,但你可以自己捲起一些東西。創建一個自定義的程序集級屬性,給它一個很酷的名字,如'AssemblyDateAttribute'。讓它接受一個字符串,您可以在可通過屬性訪問的構造函數中解析DateTime。

作爲構建過程的一部分,創建一個只有屬性應用於程序集的新文件。 (使其看起來像AssemblyInfo.cs),然後將其包含在您的構建輸入中。

然後在您的關於框中,搜索您的程序集以獲取此屬性的實例,並在框中顯示日期值。

2

我們使用這個非常相似的代碼:

DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime; 

,我敢肯定,從ClickOnce的安裝時,它不會改變。如果我錯了,請大家指正!

+0

ClickOnce中是否有一個設置來確保它不會更新每次安裝的文件日期? – JoelFan 2009-07-09 15:36:42

-1
Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

來自我自己的C#code

0

在Visual Studio項目中有一個文件AssemblyInfo.cs,但您可以使用任何其他.cs文件。再看屬性的AssemblyVersion:

// Version information for an assembly consists of the following four values: 
// 
//  Major Version 
//  Minor Version 
//  Build Number 
//  Revision 
// 
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below: 
// [assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyVersion("2.0.*")] 

現在,您可以通過使用Version.Build屬性計算構建日期。 Version.Build返回的值是以來的天數:2000/1/1