2011-08-31 70 views
15

現在我們的程序集有一個類似2.0.831.0的版本號。據我瞭解,這是主要版本,次要版本,日期和內部版本號。如果我做出改變,並在同一天再次構建它的2.0.831.1,2.0.831.2等製作TeamCity版本匹配.NET程序集版本

我TeamCity的版本號格式爲根本2. {0} {0}部分是一種自動遞增的數字,只是去永遠(2.195,2.196等)。

如何使TeamCity的外觀酷似程序集的版本?我們希望能夠將更改日誌與程序集版本相關聯,因此任何人都可以說程序集版本2.0.831.2在這些文件中有這些更改。

附加信息: 如果有問題,我們的構建步驟使用「Visual Studio(sln)」選項而不是「MSBuild」。 如果有問題,我們使用Subversion進行源代碼管理。 我們的TeamCity版本是6.5.1(build 17834)。

+0

http://stackoverflow.com/questions/1041153/teamcity-labeling-vcs-subversion-with-an-artifacts-file-version – sylvanaar

回答

21

我建議你採用semantic versioning scheme{major}.{minor}.{patch}併爲內部編號{major}.{minor}.{patch}.{build}附加第4個元素。 這樣做將版本日期納入版本控制方案更爲有用。

的TeamCity 6.5(你有沒有指定的版本)有一個內置功能,可用於在生成過程中修補在AssemblyInfo.cs中的版本。請參閱AssemblyInfo Patcher的文檔。

AssemblyInfo patcher dialog (TeamCity documentation)

然後,您可以定義你想在你的組裝和使用的構建本身的格式,也可用於修補功能的方式構建數字格式。

+0

評論ccellar爲答案,因爲我沒有足夠的評論聲望。版本字符串格式爲: major.minor [.build [.revision]] 版本號是第3個元素,而不是第4個。如果AssemblyVersion沒有這種格式,那麼Version類將在Build和Revision屬性中具有不正確的值。 http://msdn.microsoft.com/en-us/library/system.version。aspx – jbtibor

+2

@jbtibor好的一點是,微軟有不同的版本號方案,但我認爲ccellar的方案更有意義,它是我使用的方案。想一想:使用TeamCity內部版本號時,版本號始終是唯一的,因此多個版本可以有相同版本,但不可能在同一版本上有多個版本,MS的方案似乎暗示了這種版本。 –

+0

您可以在AssemblyInfo.cs中使用屬性AssemblyInformationalVersionAttribute來指定semver版本(該屬性將允許您指定任何字符串作爲版本)。這個值可以被構建過程拾取和使用。在進行更改以確定他/她檢查的事物的版本信息之前,我喜歡這種想法取決於開發人員。 –

6

一個解決方案是使用MSBuild運行器,並編寫一個MSBuild腳本,它從AssemblyInfo文件讀取版本信息,在運行構建時將TeamCity構建版本設置爲該值,然後遞增該版本的構建編號部分,並將該值寫回到AssemblyInfo。

這不是特別微不足道的,因爲您需要了解編寫自定義MSBuild腳本的知識,並且您可能需要使用某些社區任務等來讀取/寫入版本信息。

我們還使用全局程序集信息文件的概念,我們所有的組件引用(使用添加鏈接在VS),因此,我們只需要在構建過程中更新一個文件。

有一個很好的文章here,它描述了這樣共同的CI任務,MSBuild的。他正在使用CruiseControl.NET,但其中大部分仍然適用。如果你運行的是TeamCity 6.5,我會考慮使用它的構建特性,因爲這將比定製的MSBuild腳本更容易維護。

+1

這都有道理。有沒有任何教程來完成這個?我以前從未使用過MSBuild。你有什麼具體的例子嗎? – Dzejms

+0

解答已更新。 – devdigital