2010-06-04 51 views
4

新手問題:我在TeamCity中有2個C#項目,稱它們爲A和B.A包含對B.dll的引用。 B建立良好。但是,A無法建立,因爲它找不到B:找不到組件「B」在另一個項目中引用二進制文件

看起來很簡單:如何告訴我的項目A在buildserver上從哪裏找到B \ bin \ Release中的二進制文件?

回答

0

您遇到的問題是Teamcity會在其自己的臨時目錄中運行每個構建,並且由於這是一個隨機生成的名稱,因此無法直接從一個參數設置參考。

通常,您會編寫一個構建腳本,以正確的順序構建A和B,並且只需要Teamcity即可運行構建腳本。 (既然你使用C#,MSBuild對此非常理想)。

另一種方法是將B.dll複製到已知位置(例如c:\currentbuild)並在其構建結束時將A從此處始終引用。您可以在Teamcity中設置構建依賴關係,以便在重建B時重建A。

+0

感謝您的回答,我可以看到服務器上的臨時目錄,並且可以通過添加快照依賴關係來創建構建鏈。如果我可以告訴快照將B中的二進制文件複製到目錄A所期望的目錄中,那麼一切都會好的。有沒有辦法做到這一點?當然必須有? – Aidan 2010-06-04 09:19:27

+0

不,我不這麼認爲。這就是爲什麼你應該爲TeamCity編寫一個構建腳本來執行。 – Paolo 2010-06-04 17:45:29

12

您可以通過創建'Artifacts'和工件依賴關係來執行此操作。

如果項目A依賴於項目B,那麼你使用像這樣的假象路徑創建項目B中的神器:

bin/Release/B.dll 

然後在項目中你設置與像路徑B中的神器依賴性:

B.dll 

並將目標路徑設置爲項目A期望找到的地方B.dll eg

./Libs 

你可以做其他的很酷的東西像所有的文物自動歸檔到一個zip使用語法:

bin/Release/*.dll => B.zip 

,並通過訪問它們:

B.zip!B.dll 

所有這些路徑相對於構建目錄而言,這使得它變得簡單,並且不需要擔心TeamCity GUID文件夾或使用絕對路徑。

+0

偉大的技巧,謝謝 – 2012-01-16 14:04:43

相關問題