2009-07-22 93 views
2

我正在嘗試使用MSBuild和TFS。使用MSBuild和TFS

我設法創建了我自己的MSBuild腳本,該腳本在命令行中效果很好。該腳本與csproj文件一起工作,編譯,混淆,簽名並複製所需的所有內容。

但是,查看TFS & Team Build的文檔後,似乎希望將解決方案作爲腳本的「輸入」。

此外,我還沒有找到一個簡單/直觀的方式來從TFS執行「獲取最新版本」作爲腳本的一部分。我假設Team Build會自動對它想要編譯的解決方案做一個「獲取最新」的解決方案,但是我又不想(需要)使用解決方案...

任何見解?任何指針?任何鏈接?

回答

6

團隊建設定義約25 targets of its own。當您排隊Team Build時,它們會按照@ MSDN列出的預定義順序自動運行。不要修改這個過程。相反,只需設置一個確定任務如何工作的couple of these properties即可。例如,如果您想要普通獲取行爲,請將<IncrementalGet>設置爲「true」;如果您想要更接近tf get/force,則將其設置爲「false」。

就運行您自己的MSBuild腳本而言,這應該不是必需的。從爲您提供的TFSBuild.proj文件開始。它應該只需要最小的修改來完成你描述的任何事情。通過覆蓋諸如AfterCompile或AfterTest之類的任務來調用您的混淆&簽名代碼。將您的自動部署代碼放入AfterDropBuild中。等

如果您適當地重構,甚至可能是非常複雜的情況。參見過去的回答#1#2

就實際編譯而言,Team Build對解決方案的操作是正確的。我建議給它它想要的。我會第一個承認* .sln文件很醜陋,很大程度上沒有記錄,但至少您將工作卸載到經過良好測試的&受支持產品。

如果你真的想要,你可以給它一個空白/啞解決方案,並用你自定義的編譯器邏輯覆蓋CoreCompile任務。但這真的是在惹麻煩。至少,你會失去Team Build的所有靈活性WRT構建多種平臺和風格。更實際的情況是,你必須花費大量的時間去調試設計爲「正常工作」的東西 - 而且還沒有好的MSBuild調試器(我知道)。不值得,國際海事組織。

順便說一下,解決方案文件不會影響Get過程。正如您在第一個鏈接中看到的,Get早在Team Build甚至讀取解決方案文件之前就已經完成了。除了諸如<IncrementalGet>之外的一些選項,這完全不是由MSBuild控制的 - 特別是,要下載的路徑由與構建定義關聯的工作空間映射決定。即,它們存儲在Team Build SQL數據庫中,而不是文件系統中,並且使用調用TFS web服務API的工具(如團隊資源管理器)進行管理。

+0

我有一個跟進問題 - 你提到我應該在AfterCompile任務中運行混淆/簽名。這是推薦的解決方案,還是我可以使用Dotfuscator項目? 另外,Wix項目呢?我怎麼能告訴他們從哪裏拿走這些文件? – SaguiItay 2009-07-26 15:26:56