MSbuild解决方案,其中包含来自解决方案中项目的引用DLL

时间:2015-04-01 22:17:01

标签: compilation msbuild cruisecontrol.net

我正在努力让我们的持续集成服务器(巡航控制.net)与我们的解决方案一起工作。从cruisecontrol我打电话给msbuild来构建解决方案,我遇到了一些问题,让我解释一下解决方案的结构:

4个项目:

  • 数据访问
  • 的BusinessEntity
  • BusinessLayer
  • (项目A)

项目A是包含所有用户表单等的实际项目。 该项目参考了其他3个项目。

在Visual Studio中编译时,一切当然都有效。 据我所知,MSBuild的工作方式与VS完全不同。

使用msBuilds构建项目A时,出现以下错误:

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的方式有关,但我似乎无法弄清楚..

非常感谢任何帮助或建议!!

2 个答案:

答案 0 :(得分:1)

This blogpost,尽管年纪不大,应该回答你的问题。还可以找到有关如何解决此问题的更多有用信息here

通常,MSBuild在直接解析二级,三元等引用时遇到问题。可以找到更新的文章here。我没有测试过这种方法,虽然它看起来非常好并且很容易实现:

  

将以下代码粘贴到最后一个标记之前的文件中:

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

答案 1 :(得分:0)

这可能是问题

  

项目A是包含所有用户表单等的实际项目。   它有引用由其他项目创建的3个DLL

在解决方案资源管理器中,右键单击“引用”并添加新的“引用”。 不要在Assemblies下浏览依赖项,而是转到Projects,Solution,选择DataAccess,BusinessLayer和BusinessEntity项目。

现在删除文件参考&amp;保存项目文件。重建时,msbuild将检测这些ProjectReference依赖项