2012-10-22 81 views
2

到現在爲止我們的團隊與VSS的工作,我們在過程當中搬到TFS2010和VS2010。 我們的大部分代碼都是C++,我們使用了很多第三方庫,如Boost,OpenCV,OpenSSL等。 根據我閱讀的最佳實踐,我正在考慮一些選項來處理我們的多個解決方案和項目中的第三方標題和庫。引用第三方庫和頭建立代理

  1. 我爲所有第三方庫創建獨立的TFS項目,併爲每個庫和每個版本存儲源/包含/輸出。例如:

    Dependencies\ 
        -> Boost\ 
         ->boost_ver1\* 
         ->boost_ver2\* 
        -> OpenSSL\ 
         ->openssl-ver1\* 
         ->openssl-ver2\** 
    
  2. 我TFS源代碼樹的樣子:

    $\ 
        -> Dependencies\ 
        -> TeamProject1\ 
        -> TeamProject2\ 
        -> TeamProject3\ 
    
  3. 我們TeamProject(S)可能包含不同級別的文件夾樹多種解決方案。

  4. 我準備每個團隊項目一個dependencies.props文件給團隊項目導入到的所有項目。該.props文件將相關的第三方軟件包添加到$(IncludePath)$(LibraryPath)。爲了做到這一點,我假定依賴項目被映射到由每個用戶每臺機器的全局環境變量定義的文件夾。

我有一個關於這種方法的幾個問題:

  1. 我不知道如何使它在生成代理工作,因爲我不能在工作區映射選項卡中指定環境變量的構建定義。我知道BuildDirectory var和SourceDir var是每個構建更改的。

  2. 如何確保我獲得最新相關第三方的依賴關係之前,我開始構建任何TeamProject解決方案。

  3. 這是一個「好」的做法呢?

+0

如果你能等這麼久,NuGet應該在未來幾個月內獲得原生C++支持。不過,我想指出的是,除非您有充分的理由,否則通常建議不要將項目拆分到他們自己的TFS團隊項目中(http://blog.hinshelwood.com/one-team-project/) – Betty

+0

Betty,I寧願使用多個團隊項目,因爲我們有一個非常不同的調度發佈時間和許多構建來處理。 – Lub

回答

0

1:如果你想你的構建,以確定像這一套從構建定義本身所需的依賴,可以在參數使用的MSBuild參數或PowerShell的參數的進程模板通過。只要通用依賴關係和該文件包含在您的工作區中,您也可以讓邏輯從您的道具文件中獲取信息。

2:只要含有依賴源控制路徑的構建定義將構建解決方案之前同步從源頭控制的最新版本映射和解決方案建立之前都會有他們。

3:不是特別爲您的案件。我建議不要使用通用的依賴關係區域,因爲如果您執行諸如門控構建之類的操作,則會在您的門控簽入窗口中彈出所有3個構建版本。此外,對一個解決方案的更改可能會不經意間影響所有三個解決方案。你有沒有考慮過使用nuget?這可能是保持你的3個解決方案分離的最佳實踐,並且還有一些可以被其中一些或全部使用的依賴關係。例如,對於大多數編碼工作來說,最常見的依賴關係具有可下載的nuget包,這些包將在構建過程中下載,而無需檢查它們。