我所有的.NET程序集都使用1.0。*格式作爲它們的版本號。據推測*將被替換爲當前的日期和時間,翻譯成數字。將它翻譯成日期和時間的公式是什麼?我可以將.net程序集版本翻譯成日期嗎?
回答
在實踐中,我發現,內部版本號是自2000年1月1修訂天數的秒數,因爲午夜在當天由2
var result = new DateTime(2000, 1, 1);
result = result.AddDays(buildNumber);
result = result.AddSeconds(revision * 2);
不過分,正如其他人已經指出的那樣,文件並不能保證這總是如此。
謝謝!這正是我需要的。 – 2009-11-20 19:26:27
的集版本記錄在這裏:http://msdn.microsoft.com/en-us/library/51ket42z.aspx
從下面的報價,我會說,你要問是不可能的,您的信息不正確。
集版本號的每個組件 的版本號爲 身份的一部分。因此, 與版本號不同的兩個程序集 被運行時考慮爲 完全不同的程序集。這 版本號是物理表示爲四部分組成的字符串 以下格式 :
<major version>.<minor version>.<build> number>.<revision>
然而,在頁面的底部我聯繫,有關於自定義組件屬性的信息和鏈接到設置裝配屬性。你可能會發現一些有用的東西。 編輯 - 添加
我接過一看,你在你的答案貼到我的評論的鏈接,我唯一看到的是這樣的:
這樣做的結果是構建號碼 設置爲自從 隨機指定的開始日期以及 修訂基於自午夜以來的 秒數的天數。
基礎上,它說「隨機指定的開始日期」我會說,你問世界衛生大會可能是可能的,如果你能找出隨機指定的開始日期是什麼事實,但我懷疑它會值得努力發現。
編碼最佳範例
無恥的插頭,您會得到更好的服務於使用版本控制和自動化的構建過程,並使用日誌從那些確定asembly的生成日期。
版本字符串的格式爲:
<major version>.<minor version>.<build number>.<revision>
,如果你設置的版本,你所描述,對1.0.*
:
這樣做的結果是內部版本號 設爲自 隨機,指定開始日期以及 修訂基於自午夜以來的 秒數的天數。
這裏的關鍵是「隨機」。因此,您可以將修訂版翻譯爲一天中的某個時間,但聽起來您無法將其解決爲日期。
據MSDN:「默認的內部版本號每日遞增,默認版本號是隨機的。」
如果您在反射器中查看AssemblyVersionAttribute
的源代碼,您會發現它根本沒有做任何事情,只是接受字符串。所以魔術就發生在編譯器本身上,據我所知,沒有任何文件記錄。 「每天增加」相當含糊,從哪一點開始?
我不希望能夠以任何可靠性使用這些版本。將版本從源代碼控制系統或類似的標籤中取出,可能會更好。
即使您可以從自動生成的內部版本號中計算日期/時間,我也不會推薦它。內部編號並不是爲此目的而設計的。它只是一個你可以依靠不斷增加的自動生成的值。消費應用程序不應該採取進一步的邏輯。如果您想要版本號的片段包含日期/時間戳記,那麼您應該將該邏輯集成到您的構建過程/腳本中,不過您可能會選擇這樣做。
你怎麼知道我在構建邏輯?也許我只是在看一個DLL,並試圖獲得最佳猜測,以確定它的構建時間。 – 2009-11-20 19:30:39
你可以同時擁有:例如170504是一個遞增的數字,也是YYMMDD的日期。你不會單步增加,但你可能會發現這不是必需的。 – tenpn 2017-04-05 16:20:51
我使用PostBuild腳本在我的組件呼籲的AssemblyInfo.cs
我們使用以下格式版本UpdateVersion |年|月|日| BuildCounter |。
由於更新版本是開源的,您可以修改它以適應。
我已經修改它以使用當前日期和增加每個構建的計數器。
這樣,版本號總是變化,我可以從版本號中推導出日期。
的確很方便。
舊的帖子,但希望這將提供另一個(簡單)選項更新版本上的版本號。我使用了MSBUILD RegexTransform步驟來修改版本號。以下是我需要實現此功能時經常返回的帖子。
基本上,你MSBUILD凸出文件創建您的AssemblyInfo文件轉換。類似:
<ItemGroup>
<RegexTransform Include="$(SolutionRoot)\CommonAssemblyInfo.cs">
<Find>(?<major>\d+)\.(?<minor>\d+)\.\d+\.(?<revision>\d+)</Find>
<ReplaceWith>$(BUILD_NUMBER)</ReplaceWith>
</RegexTransform>
</ItemGroup>
其中BUILD_NUMBER外部提供:
msbuild myBuild.proj /p:Configuration="%config%" /p:build_number="%version%"
在羅斯林和.NET核心,編譯源代碼現在可用。
文件roslyn/src/Compilers/Core/Portable/VersionHelper.cs
(https://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
- 1. 您可以混合使用.Net的不同版本編譯的程序集嗎?
- 2. 有人可以幫我翻譯這個C程序到MIPS程序集嗎?
- 3. 有人可以幫我把這個腳本翻譯成cmd嗎?
- 4. 將Zend翻譯器集成到我的應用程序
- 5. CoffeeScript可以翻譯成這段JavaScript嗎?
- 6. 我可以使用Google翻譯翻譯我的網站嗎?
- 7. .NET程序集版本
- 8. 我可以混淆編譯的.NET可執行文件/程序集嗎?
- 9. 將C程序翻譯成IA32程序集(非常快)
- 10. 是否可以將Alexa技巧翻譯成Android應用程序?
- 11. 我可以將MathJax集成到Python程序中嗎?
- 12. .NET 4.0程序集可以用於.Net 3.5應用程序嗎?
- 13. 讓TeamCity將Subversion版本號集成到程序集版本
- 14. .NET程序集如何將引用「翻譯」爲文件路徑?
- 15. 在較新的.NET版本中運行的舊.NET版本中編譯的程序集會改變行爲嗎?
- 16. 在已編譯的.NET程序集中更改程序集版本
- 17. 我可以調試編譯的程序集嗎?
- 18. 可以像編譯.NET程序集一樣的jar文件進行版本化嗎?
- 19. 如何將日期翻譯成星期名稱
- 20. 將Java代碼翻譯成ARM程序集?
- 21. 將可可翻譯成可可 -
- 22. 獲取.NET程序集的日期
- 23. 我可以將DateTimePicker日期和文本框「時間」插入日期時間嗎?
- 24. Android 2.3 SDK可以交叉編譯到早期版本嗎?
- 25. 我如何指出多個版本的相關程序集可以嗎?
- 26. 使用版本化的.Net程序集
- 27. 我們可以將Web郵件與我們的應用程序集成嗎?
- 28. 我們可以將IMDB與我們的tvOS應用程序集成嗎?
- 29. 我可以將微軟鏡頭集成到我的應用程序中嗎?
- 30. 我可以在SDL TRIDION 2011中獲得以前版本的發佈日期嗎?
蜱? '新的日期時間(長蜱)' – 2009-11-19 22:23:48
你能舉一個你的意思嗎? – CesarGon 2009-11-19 22:24:12
你從哪裏知道* gtes與當前日期/時間有關? – David 2009-11-19 22:24:26