TFS Build 2010 生成版本號

2022-02-22 23:08:12 字數 2663 閱讀 9528

tfs build 2010生成構建之 dll、exe檔案的版本

tfs build 2010的生成服務十分的強大,以前的版本號外掛程式現在已經不需要了,直接在生成定義裡面做就可以了(參考"tfs 2010 build中,版本號的定義",具體版本號定義可參考 "軟體專案版本號的命名規則及格式介紹**)")。但是這個方法只能讓生成的名稱有版本號,如testinstaller_2.0.21023.1。生成完成後的dll檔案和exe檔案的版本怎樣能和這個定義的版本號匹配呢?下面就是我的方法。原創且成功實現,但是一定繞彎了,希望大家能夠指正。

ps:有一款生成的外掛程式應該能達到這個效果。不過我沒成功,可能因為我的tfs是中文,外掛程式是英文導致的。

dll和exe檔案的版本都是在properties資料夾的assemblyinfo.cs檔案下定義的。只要在構建之前將這個檔案內的版本相關資訊修改,在編譯後就可以實現dll的版本號了。

因此,我們大概的流程就是在生成的過程中加入乙個環節----生成伺服器在完確定版本號、獲取原始碼後對所有的assemblyinfo.cs檔案進行修改,將其版本號修改後再進行生成即可。

首先要規定一下版本號的樣式。一般來說我們使用

"產品_主版本.次版本.內部版本號.修訂號"的方式。因此我們再生成定義中,內部版本號指令碼使用此格式

$(builddefinitionname)_1.0.1$(date:mmdd)$(rev:.r)

這裡要說明一下。

問題:內部版本號不能在生成定義的時候做計算,如mod,直接使用完整的年月日編譯的時候又會出問題。因此只能手工定義。這裡如果有人知道如何簡單完成。請告知。謝謝!

由於沒找到相應的方法,我只能呼叫外部程式,對assemblyinfo檔案進行修改。大概方式就是讀取assemblyinfo檔案,正則找到相應位置,將版本號修改為傳入的版本號,儲存檔案。

這樣,我們再執行乙個修改的時候的方式是

modifyversioninfo.exe x:\ assemblyinfo.cs 2.0.1520.1 2.0.1520.1

附源**:

編輯"defaulttemplate.xaml"檔案,雙擊"runonagent"過程。點選變數,新建乙個變數"allassemblyinfofiles",其型別為"ienumerable"用於儲存assemblyinfo檔案路徑列表。

在if creatlabel過程後拖入乙個"findmatchingfiles"並改名為"findassemblyinfofiles"

編輯matchingpattern如下

sting.format(sourcesdirectory + "\**\assemblyinfo.cs")

編輯result如下

在findassemblyinfofiles的後面拖入乙個foreach的迴圈。將其values改為"allassemblyinfofiles"

雙擊進入foreach迴圈,在其中放入乙個"sequence",並取名為"modifyassemblyinfofile"

雙擊進入modifyassemblyinfofile。放入乙個"invokeprocess"取名為"modifyassemblyinfofile"

修改argument為:

string.format(item.tostring() + " " + builddetail.buildnumber.substring(builddetail.buildnumber.indexof("_") + 1, builddetail.buildnumber.length - builddetail.buildnumber.indexof("_") - 1) +" " + builddetail.buildnumber.substring(builddetail.buildnumber.indexof("_") + 1, builddetail.buildnumber.length - builddetail.buildnumber.indexof("_") - 1))

filename為(外掛程式的放置位置—在生成伺服器上):

string.format("c:\modifyversioninfo.exe")

儲存即可

生成後可以看到版本號已被修改

VS2010生成DLL問題

遇到個扯蛋的問題,搞了很久。從別的專案裡拷貝來的 自己用vs2010新建了乙個dll專案,發現生成的dll很小。如圖 我的50k,示例 400k。然後載入後怎麼也沒反應,以為是配置 不對,對著把專案屬性都改了也不行,後來把配置屬性中的常規 mfc的使用 改為在靜態庫中使用mfc就行了。但是為毛原來那...

關於VS2010生成exe 續

前一篇文章寫了如何利用int main int argc,char argv 生成帶引數的exe檔案,並用matlab呼叫exe。然而在我的使用中卻發現了一些問題,在自己的電腦上能很好的執行,但是放到其他電腦上卻不能執行,也不報錯 所以這個錯誤隱藏了好幾天 就相當於指令沒有執行。檢查發現,應該是測試...

VS2010 生成dll及測試

建立乙個專案 win32控制台應用程式 注意選擇dll 後面寫cpp和h檔案,注意不要寫main 函式,需外部呼叫的函式宣告前新增extern declspec dllexport 例如 extern declspec dllexport void getij jiaodu char line,do...