2013-07-17 39 views
0

目前我困擾着兩個TFS構建問題:如何讓我的構建代理構建具有外部項目引用的解決方案?

問題一:我有一個項目的解決方案,該項目現在引用另一個解決方案中另一個項目的dll產品。構建代理似乎不包含這些dll,並且構建失敗。

問題二:我有一個解決方案在另一個解決方案中引用了一個項目。構建代理似乎沒有包含外部引用的項目,並且構建失敗。

我已經看過「複製目錄」構建活動,但不知道在哪裏填充或將要放置爲源和輸出值。

+1

修復參考文獻。這是一個項目設計問題,而不是一個tfs問題。爲外部引用使用文件引用。 –

+0

@JamesWoolfenden問題一我有文件引用,TFS仍然沒有將這些DLL複製到構建代理。有什麼想法嗎? – Ian

+2

從源樹中的libs文件夾引用它們。如果它的第三方dll考慮使用nuget。 –

回答

2

最佳做法是使用項目引用來引用同一解決方案中的其他項目。對於解決方案外部的引用,您應該使用文件引用,然後檢入正在引用的已編譯的DLL。

Solution1 
    \Project1 --> Project1.dll 
    \Project2 --> Project2.dll 

Solution2 
    \ProjectA (references Project1.dll) 
    \ProjectB (references Project2.dll) 
    \References 
     \Project1.dll -- this DLL gets checked in here and ProjectA references from here 
     \Project2.dll -- this DLL gets checked in here and ProjectB references from here 

ProjectA.csproj

<Reference Include="Project1.dll, Version=blah blah blah"> 
    <HintPath>..\References\Project1.dll</HintPath> 
</Reference> 

ProjectB.csproj

<Reference Include="Project2.dll, Version=blah blah blah"> 
    <HintPath>..\References\Project2.dll</HintPath> 
</Reference> 

使用這種方法,你必須建立解決方法1,獲得其掉下的DLL文件,然後檢查他們到引用Solution2的文件夾。您可以獲得真正的花式並在構建Solution1的自動檢出Solution2 \ References文件夾的一些邏輯中,用生成的最新版本替換Project1和Project2 DLL,然後檢查它們...如果您使用持續集成可以啓動Solution2的構建。

+0

如果你不想要,你不需要指定「,Version = blah等等等等」。 –

+0

我試着將文件引用添加到源代碼控制,並從構建代理中得到「沒有工作文件夾映射」異常。我現在將把外部項目中的dll複製到我爲第三方dll設置的「外部引用」文件夾,並添加這些文件並將這些文件引用重做到這些新副本。 – Ian

+0

您必須確保被引用的DLL是您的構建工作區的一部分。 –

0

如果您使用的是TFS 2012/TFS2010構建模板,請確保屬性「Solution Specific Build Output」設置爲false。這將確保構建代理在同一個bin目錄中構建所有程序集。

相關問題