2013-02-05 112 views
8

我們使用Team Foundation Service而不是本地TFS。 我們的解決方案是在Visual Studio 2012上創建的。 我現在的問題是我們希望所有程序集具有相同的版本號(這部分已經通過使用鏈接到所有項目的CommonAssemblyInfo.cs解決)。 我現在面臨的問題是,我們需要程序集版本的最後一位數字(例如1.0.0.4711,其中4711是變更集編號)處的tfs變更集編號。 我發現了幾個例子,但他們都沒有爲我工作。 是的,我特別在這裏搜索了很多stackoverflow。使用託管TFS將版本號更改爲版本信息

我也必須承認,我從來沒有調查過的MSBuild腳本...

誰能請給我如何做到這一點的提示? 是否有可能在團隊基礎服務(不是本地TFS)上使用MSBuild擴展包,以及如何做到這一點?

與往常一樣,時間是我最大的敵人......

回答

2

注意,從2010年TFS使用的Windows工作流構建工作流調用的MSBuild只編譯項目包 - 而其可能通過變更集這種方式來msbuild更具跳躍性。 在與你的問題的交易,但鏈接的解決方案更復雜,需要: Can assembly version been automatically updated with each TFS 2010 Build?

這是最好的一系列定製教程共建活動,筆者在棧以及我相信,一個specificly有關的一個版本 http://www.ewaldhofman.nl/post/2010/05/13/Customize-Team-Build-2010-e28093-Part-5-Increase-AssemblyVersion.aspx

總之你需要一個自定義活動上的源文件編譯運行之前,找到所有CommonAssemblyInfo.cs文件,養活這個名單到您的自定義活動,它的完整版本號傳遞的值或修改裏面的值只有changeset和optionaly檢查更改(可能不會,因爲您的更改集將不同步)。

你也可以看看https://tfsbuildextensions.codeplex.com/這套活動中有TfsVersion活動,至少它會提供例子。

功能需要通過團隊資源管理器和源代碼管理 - 自定義活動程序集和構建模板通常位於團隊項目的根文件夾中 - 此文件夾的位置是爲構建控制器定義的,您可以更改此設置通過團隊瀏覽器構建部分。

變更集可從價值BuildDetail.SourceGetVersion,不知道這是固定/ 2012年改但有這個價值2期,2010年

  1. 其犯規方面GetVersion在默認的編譯模板覆蓋 - 你會手動需要更新,如果覆蓋
  2. 當運行最新版本(沒有覆蓋)它會從tfs得到最後的變更集編號 - 取決於你的分支這可能不是'最後'變更爲分支構建。您將不得不忍受這一點,爲每個構建提供覆蓋,或實施檢查最後變更集值的分支歷史記錄並重新覆蓋它的活動。

應該指出的是,GetVersion應該能夠接受任何sourcespec版本 - 變更集,日期,標籤等。我沒有玩過這足以提供更多的細節給你。

+0

非常感謝,也有你的文章了一些非常有用的鏈接! – AlexK

+0

不過,我還沒有找到工作的方式來獲得變更集數...我已經發現了幾個帖子,讓使用標籤的似乎並不在VS2012的工作......這就是處罰工作採用尖端技術。 – AlexK

+0

編輯有關更改集編號 – drk

0

我用Wintellect's solution - 的MSBuild只,沒有TFS魔術需要。我還加入了對自動生成CSharp文件:
[assembly:AssemblyInformationalVersion("$(BuildNumber)")]
所以我得到的TFS版本號。

+3

但請注意,BuildNumber未更改 - 它可能根本不包含更改集 - 它在默認實現中不起作用。 – drk

0

科林Dembovsky寫了great overview of doing version embedding using the new pre-build script setting in TFS 2013 build definitions

在環境變量TF_BUILD_SOURCEGETVERSION的預生成過程中可輕鬆訪問Changeset編號。我能夠使用它來使用基於Dembovsky上面的工作的腳本在我們的二進制文件中嵌入Changeset值。 (我用的Perl,而不是PowerShell的,所以你可能不希望看到它;-)

這種方法不需要對構建工作流,這使得它的一個重要的勝利對我來說任何變化。

+0

那麼你的變更集編號腳本的版本是什麼樣的? –