2015-04-01 233 views
0

我試圖讓我們的持續集成服務器(巡航控制.net)與我們的解決方案一起工作。從CruiseControl的我呼籲的MSBuild來構建解決方案,我在一些問題上運行,讓我解釋一下解決方案的結構:MSBuild解決方案與解決方案中的項目引用的DLL

4個項目:

  • 數據訪問
  • 的BusinessEntity
  • BusinessLayer
  • (項目A)

項目A是具有所有用戶形式等的實際項目。 該項目已引用其他3個項目。

當在Visual Studio中編譯時,一切工作當然.. 從我理解的是,MSBuild工作與VS完全不同。

當構建項目A和msBuilds我得到以下錯誤:

C:\CI\Project A\Source\Project A\General.vb(859,33): error BC30007: Reference required to assembly 'System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' containing the base class 'System.EnterpriseServices.ServicedComponent'. Add one to your project. [C:\CI\Setra\Source\Project A\Project A.vbproj]]]></message> 

有趣的是,項目A沒有引用在所有提到的組件。但是項目A中引用的DLL確實有。

當我用msbuild編譯其他項目(那些生成DLL的),構建成功。

我有什麼做的DLL的在主項目引用的方式感覺,但我似乎無法推測出來..

任何幫助或建議,非常感謝!

回答

1

This blogpost,儘管是相當古老,應該回答你的問題。關於如何處理這個問題的一些更有用的信息也可以在here找到。

一般來說,MSBuild直接解決二級,三級等參考時存在問題。更新的文章可以在here找到。我沒有測試過這種方法,但它似乎相當不錯,容易一見鍾情實現:

Paste the following code into the file before the last tag:

<Target Name="AfterResolveReferences"> 
    <!-- Redefine referencepath to add dependencies--> 
    <ItemGroup> 
     <ReferencePath Include="@(ReferenceDependencyPaths)"></ReferencePath> 
    </ItemGroup> 
</Target> 
+1

非常感謝我指出了正確的方向。將您所參與的代碼添加到每個項目中解決了問題! – Chancho 2015-04-13 19:47:44

0

這可能是問題

Project A is the actual project with all the user forms etc. it has references to 3 DLL's which are created by the other projects.

在解決方案資源管理器中,右鍵點擊參考並添加一個新的參考。 請勿瀏覽Assemblies下的依賴關係,而是轉到Projects,Solution,選擇DataAccess,BusinessLayer和BusinessEntity項目。

現在刪除文件引用&保存項目文件。當你重建時,msbuild會檢測到這些ProjectReference的依賴關係

+0

項目以這種方式引用,我沒有太好描述..更新了我原來的問題! – Chancho 2015-04-13 18:48:29