2012-12-18 71 views
11

假設我的版本號爲1.5。*,編譯爲1.5.4735.28467。.NET中「*」(通配符)版本號的公式是什麼?

獲得4735和28467的公式是什麼?

+1

主要,次要,建立,修訂。建立和修改取決於你...... –

+0

http://blogs.msdn.com/b/jensenh/archive/2005/11/11/491779.aspx。但是這是針對Microsoft Office的;我不知道它是否以相同的方式用於.NET Framework。 –

+7

Build = DateTime.Today.Subtract(new DateTime(2000,1,1))。Days; Revision =(int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds/2; 太糟糕了,這關閉了;所謂的重複是一個不同的問題... – Daniel

回答

18

請注意:替代工具/規則/方案/宏/插件/等控制以不同的方式的版本;如果使用它們,顯然會消除以下情況。

然而,這是一個"*"版本如何在香草的Visual Studio/.NET構建過程計算.build.revision

在指定的版本,你必須至少指定專業。如果您指定主要和次要,可以爲生成指定星號(*)。這將導致自2000年1月1日,當地時間構建等於的天數,併爲修訂等於自當地時間午夜的秒數,由2

參見Coding Horror: Determining Build Date the hard wayMSDN: AssemblyVersionAttribute。此默認擴展行爲在AssemblyVersionAttribute類(BCL!)中記錄,而不是特殊的VS編譯器行爲(請參閱Daniel的評論),而不是專門編譯器行爲。


這是一個實現公式(從丹尼爾的評論中提取)的:

int Build = DateTime.Today.Subtract(new DateTime(2000, 1, 1)).Days; 
int Revision = (int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds/2; 
+3

這絕對是編譯器的行爲。編譯器不會實例化任何屬性;它只是在元數據中對參數值進行編碼。但編號時會被替換;它必須是編譯器中的特例。沒有辦法編寫自定義屬性來做類似的事情。 – Daniel

+0

@Daniel這是一個很好的論點。我希望我能找到一個關於版本號如何工作的VS(非.NET)參考。 – 2012-12-20 00:33:03

+2

您還可以在Roslyn中查看實現:http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/VersionHelper.cs,95 – eug