2013-04-26 201 views
2

項目A參考項目B.項目B參考項目C.項目A不參考項目C.VB.NET解決方案中的間接引用解決方案構建

這在本地生成良好。然而,在構建服務器是錯誤的,因爲項目A沒有引用項目C.

錯誤:

error BC30009: Reference required to assembly 'ProjectC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' containing the implemented interface 'ProjectC.IFoo'. Add one to your project.

如何在提交之前,我能趕上嗎?

編輯: 這裏是我的問題的詳細信息:http://sstjean.blogspot.com/2006/11/msbuild-cant-find-secondary-references.html

+0

您收到的確切錯誤是什麼?另外,是否有可能在構建服務器上構建了不同的配置? – SoftwareCarpenter 2013-04-26 18:49:35

+0

是的,它正在構建Release配置與Debug配置。我將用確切的錯誤信息編輯OP。 – 2013-04-26 18:55:59

+0

更新:我使用發佈配置在本地構建並獲得相同的構建錯誤。現在要弄清楚配置的區別... – 2013-04-26 19:15:17

回答

1

這裏有兩件事情你可以做一個最好的做法,以確保您的項目是正確引用和的MSBuild將能夠正確地找到你所引用的項目。

  1. 使用項目引用而不是引用dll的。創建一個名爲dependencies或libs的文件夾,並將任何引用的dll放在這個文件夾中。

  2. 通過右鍵單擊項目並選擇項目構建順序,檢查每個項目的構建順序和項目依賴關係選項卡。確保項目中的每個參考都由該項目構建。

MSBuild不知道.sln文件是什麼。 MSBuild讀取並分析.sln文件以確定項目的構建順序。通過讓項目引用MSBuild能夠以正確的順序遍歷和構建項目。請參閱下面的鏈接瞭解更多信息

此鏈接還有助於解釋爲什麼你會看到不同的行爲和如何捕捉它。

Visual Studio Integration (MSBuild)

在Visual Studio中,解決方案文件和項目生成順序是由Visual Studio本身控制。在命令行上使用msbuild.exe構建解決方案時,MSBuild解析解決方案文件並訂購項目構建。在這兩種情況下,項目都是以依賴順序單獨構建的,項目引用項目不會被遍歷。相反,當使用msbuild.exe構建單個項目時,會遍歷項目到項目的引用。

在Visual Studio中構建時,屬性$(BuildingInsideVisualStudio)設置爲true。這可以用在您的項目或.targets文件中,以使構建行爲有所不同。

+0

目前我無法給你+1,因爲你的第一句話對我的行爲沒有任何不同。雖然你的答案的其餘部分相當成功地試圖糾正這一點。 – 2013-05-03 03:09:51

+0

關於使用項目引用的句子? – SoftwareCarpenter 2013-05-03 03:36:33

+0

如果您需要我編輯我的答案,請讓我知道。 – SoftwareCarpenter 2013-05-03 03:37:45