MSbuild 解决方案,其中引用了解决方案中项目的 DLL

MSbuild solution with referenced DLL from a project within the solution

我正在尝试让我们的持续集成服务器 (cruise control .net) 与我们的解决方案一起工作。我从 cruisecontrol 调用 msbuild 来构建解决方案,我 运行 遇到了一些问题,让我解释一下解决方案的结构:

4 个项目:

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

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

This blogpost, despite being quite old, should answer your question. Some more useful info on how to approach this problem can be also found 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>

这可能是问题所在

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 依赖项