2015-04-01 277 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