2009-11-19 100 views
6

我所有的.NET程序集都使用1.0。*格式作爲它們的版本號。據推測*將被替換爲當前的日期和時間,翻譯成數字。將它翻譯成日期和時間的公式是什麼?我可以將.net程序集版本翻譯成日期嗎?

+0

蜱? '新的日期時間(長蜱)' – 2009-11-19 22:23:48

+0

你能舉一個你的意思嗎? – CesarGon 2009-11-19 22:24:12

+0

你從哪裏知道* gtes與當前日期/時間有關? – David 2009-11-19 22:24:26

回答

14

在實踐中,我發現,內部版本號是自2000年1月1修訂天數的秒數,因爲午夜在當天由2

var result = new DateTime(2000, 1, 1); 
result = result.AddDays(buildNumber); 
result = result.AddSeconds(revision * 2); 

不過分,正如其他人已經指出的那樣,文件並不能保證這總是如此。

+0

謝謝!這正是我需要的。 – 2009-11-20 19:26:27

0

的集版本記錄在這裏:http://msdn.microsoft.com/en-us/library/51ket42z.aspx

從下面的報價,我會說,你要問是不可能的,您的信息不正確。

集版本號的每個組件 的版本號爲 身份的一部分。因此, 與版本號不同的兩個程序集 被運行時考慮爲 完全不同的程序集。這 版本號是物理表示爲四部分組成的字符串 以下格式 :

<major version>.<minor version>.<build> number>.<revision> 

然而,在頁面的底部我聯繫,有關於自定義組件屬性的信息和鏈接到設置裝配屬性。你可能會發現一些有用的東西。 編輯 - 添加

我接過一看,你在你的答案貼到我的評論的鏈接,我唯一看到的是這樣的:

這樣做的結果是構建號碼 設置爲自從 隨機指定的開始日期以及 修訂基於自午夜以來的 秒數的天數。

基礎上,它說「隨機指定的開始日期」我會說,你問世界衛生大會可能是可能的,如果你能找出隨機指定的開始日期是什麼事實,但我懷疑它會值得努力發現。

編碼最佳範例

無恥的插頭,您會得到更好的服務於使用版本控制和自動化的構建過程,並使用日誌從那些確定asembly的生成日期。

2

版本字符串的格式爲:

<major version>.<minor version>.<build number>.<revision> 

,如果你設置的版本,你所描述,對1.0.*

這樣做的結果是內部版本號 設爲自 隨機,指定開始日期以及 修訂基於自午夜以來的 秒數的天數。

這裏的關鍵是「隨機」。因此,您可以將修訂版翻譯爲一天中的某個時間,但聽起來您無法將其解決爲日期。

http://msdn.microsoft.com/en-us/library/ms998223.aspx

+0

有趣的是,你的MSDN鏈接和我的鏈接相互衝突了一下。 – 2009-11-19 22:33:30

+0

對不起,@Michael - 我不小心編輯了你的文章,然後意識到我的錯誤,並從你的文章中刪除了我的編輯並將它們放入我自己的文章中。這是一場意外。 *對不起* – David 2009-11-19 22:37:31

+0

但給你+1,因爲它看起來像你的結論是我如何閱讀它。 – David 2009-11-19 22:38:02

2

MSDN:「默認的內部版本號每日遞增,默認版本號是隨機的。」

如果您在反射器中查看AssemblyVersionAttribute的源代碼,您會發現它根本沒有做任何事情,只是接受字符串。所以魔術就發生在編譯器本身上,據我所知,沒有任何文件記錄。 「每天增加」相當含糊,從哪一點開始?

我不希望能夠以任何可靠性使用這些版本。將版本從源代碼控制系統或類似的標籤中取出,可能會更好。

+0

並給你+1。 – David 2009-11-19 22:38:35

+0

+1用於源代碼管理系統中的標籤。 – Russell 2009-11-19 22:45:00

+0

可靠性並不重要,我只是需要一些東西。 – 2009-11-20 19:27:41

0

即使您可以從自動生成的內部版本號中計算日期/時間,我也不會推薦它。內部編號並不是爲此目的而設計的。它只是一個你可以依靠不斷增加的自動生成的值。消費應用程序不應該採取進一步的邏輯。如果您想要版本號的片段包含日期/時間戳記,那麼您應該將該邏輯集成到您的構建過程/腳本中,不過您可能會選擇這樣做。

+0

你怎麼知道我在構建邏輯?也許我只是在看一個DLL,並試圖獲得最佳猜測,以確定它的構建時間。 – 2009-11-20 19:30:39

+0

你可以同時擁有:例如170504是一個遞增的數字,也是YYMMDD的日期。你不會單步增加,但你可能會發現這不是必需的。 – tenpn 2017-04-05 16:20:51

0

我使用PostBuild腳本在我的組件呼籲的AssemblyInfo.cs

我們使用以下格式版本UpdateVersion |年|月|日| BuildCounter |。

由於更新版本是開源的,您可以修改它以適應。

我已經修改它以使用當前日期和增加每個構建的計數器。

這樣,版本號總是變化,我可以從版本號中推導出日期。

的確很方便。

0

舊的帖子,但希望這將提供另一個(簡單)選項更新版本上的版本號。我使用了MSBUILD RegexTransform步驟來修改版本號。以下是我需要實現此功能時經常返回的帖子。

http://weblogs.asp.net/srkirkland/archive/2010/12/07/simple-msbuild-configuration-updating-assemblies-with-a-version-number.aspx

基本上,你MSBUILD凸出文件創建您的AssemblyInfo文件轉換。類似:

<ItemGroup> 
    <RegexTransform Include="$(SolutionRoot)\CommonAssemblyInfo.cs"> 
     <Find>(?&lt;major&gt;\d+)\.(?&lt;minor&gt;\d+)\.\d+\.(?&lt;revision&gt;\d+)</Find> 
     <ReplaceWith>$(BUILD_NUMBER)</ReplaceWith> 
    </RegexTransform> 
</ItemGroup> 

其中BUILD_NUMBER外部提供:

msbuild myBuild.proj /p:Configuration="%config%" /p:build_number="%version%" 
0

在羅斯林和.NET核心,編譯源代碼現在可用。

文件roslyn/src/Compilers/Core/Portable/VersionHelper.cshttps://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/Portable/VersionHelper.cs - 從提交4f44984 on 2016-04-19)確實有從原來的csc同一日期邏輯的方法GenerateVersionFromPatternAndCurrentTime

int revision = (int)time.TimeOfDay.TotalSeconds/2; 

// 24 * 60 * 60/2 = 43200 < 65535 
Debug.Assert(revision < ushort.MaxValue); 

// ... 

TimeSpan days = time.Date - new DateTime(2000, 1, 1); 
int build = Math.Min(ushort.MaxValue, (int)days.TotalDays); 

return new Version(pattern.Major, pattern.Minor, (ushort)build, (ushort)revision); 

然而文檔的意見簡單地說「基於時間的價值」,而不具體關於它是如何產生的。

不過說實在的,至今Build仍然是日以來2000-01-01和Revision一半自午夜起的秒數。

有趣的是,這種行爲定義和驗證VersionHelperTests.cs在測試用例https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs

相關問題