2012-08-02 43 views
0

的舊版本我有:的MSBuild - 用匯編

  • 的共享的功能性[A]
  • 的另一種文庫[B]甲庫, 引用A的V1 [A1]

我目前的Visual Studio解決方案有:

  • dll [L],其中(文件)引用B
  • WindowsService [S],其中(項目)引用L,並且還具有對A,[A2]的更新但向後兼容版本的文件引用。

當我在Visual Studio中構建解決方案時,一切正常。 S的bin文件夾包含L,B和A2(與B兼容,因此效果很好)。

但是,如果我使用MSBuild(通過TeamBuild)構建,最終構建文件夾以L,B和A1結束。 A1沒有S所要求的庫A的新特性,所以當你試圖運行它時,S會落空。


我已經閱讀了一些建議與MSBuild忽略的.sln構建順序有關的事情。

我發現L的bin目錄包含B和A1,正如我所料,因爲沒有任何內容對A2有任何引用。所以假設當MSBuild構建了L(本地拉入B和A1)和S(拉入L和A2)時,它必須將所有二進制文件合併到構建的最終輸出中。我不明白的是,選擇A1(從L bin)到A2(從S bin)?

我很欣賞沒有什麼可以說它應該是另一種方式,但我不知道MSBuild使用什麼標準來進行此調用。

任何人都可以對此有所瞭解嗎?

回答

0

Tom在teambuild中的msbuild工作方式是,所有項目的所有輸出dll都放在outputdirectory中。該輸出目錄爲解決方案中的所有項目共享。所以,如果你有不同版本的相同的DLL,他們會覆蓋對方。

解決方法是使用這些項目的子目錄$(Outdir)\ SpecificDir或使用版本標記重命名dll,例如A.1.0.dll和A.dll