【问题标题】:Cannot add reference to project because of a circular dependency error由于循环依赖错误,无法添加对项目的引用
【发布时间】:2011-10-28 23:08:59
【问题描述】:

我在我的应用程序中创建了 2 个虚拟项目,并将它们命名为 BALDAL。当我构建它们时,它们构建成功。如果我将BAL 的引用添加到DAL 项目,它添加得很好。但是在将DAL 引用添加到BAL 项目时,我收到以下错误:

无法添加对 DAL 的引用。将此项目添加为引用会导致循环依赖。

谁能帮我解决这个错误?

【问题讨论】:

标签: visual-studio visual-studio-2010 projects-and-solutions circular-dependency


【解决方案1】:

您需要执行以下操作:

  1. 在解决方案资源管理器中右键单击 DAL 项目,然后在上下文菜单中选择 项目依赖项

  2. 您现在将看到一个显示 DAL 项目的项目依赖关系的窗口。确保未检查 BAL。

现在您应该可以添加参考了...

我希望这会有所帮助,我已尽量保持简单明了。

说明:

您的 DAL 应该无法访问 BAL。你的代码引用依赖应该是这样的:

MVC 项目 -> BAL -> DAL

MVC 项目应该引用 BAL,BAL 应该引用 DAL。像这样设置你的项目。让它工作,然后你会更好地理解为什么这个设置更好。

鉴于:

  1. 数据 = 原始数字和字符串
  2. 信息 = 将数据处理成有意义的东西

考虑以下事项: UI 应该从 BAL 获取其信息,该 BAL 可以基于 DAL 组合它的 数据

【讨论】:

    【解决方案2】:

    你只能以一种方式引用,否则你会得到你所说的错误。只需这样做:删除您的 DAL 对您的 BL 的引用,然后从您的 BL 到您的 DAL 新建一个!

    【讨论】:

    • 使用一个公共层而不是... 更具体:在您的项目中添加一个名为 common 的新层,然后将您的业务对象放在该层中。现在您可以在所有 BL 和 DAL 层中引用该层。
    • 我只是添加这样只创建 2 个新项目,但我仍然遇到问题
    【解决方案3】:

    在“层”的概念中隐含的是,较高层依赖于较低层,而不是相反。如果两个“层”是相互依赖的,那么一个不高于另一个,它们不是任何有意义的层,因此可以认为是在同一层中。相同的基本原则适用于架构组件或模块,正如 Studio 对项目依赖项所强制执行的那样。如果您使用此原则 - 将您的项目视为设计模块,而不是例如只需将所有内容都放入一个项目中 - 您将拥有结构良好的代码库,随着规模的增长,它会给您带来更少的问题。

    【讨论】:

    • -1 因为我仍然不知道,在阅读了您的答案后,如何让 VS 做我需要的。
    • -1 因为这没有回答用户或我自己的问题,他们有同样的情况。
    • 您提出了一个非常有效的观点,但是并不总是可以仅重写您继承的大量代码库,而这些代码库恰好写得不好。
    • 业务层中存在的Domain Model,显然需要DAL datamapper类使用,请问如何解决这个问题? p.s.无需求助于贫乏的领域模型,这将帮助您将领域模型脱离业务层。
    • 致反对者——我认为这不是让 Visual Studio 做你想做的事,更多的是你想要错误的东西。这是一个基本概念。
    【解决方案4】:

    这会导致循环依赖。您可能想要做的是拥有一个引用 BAL 的主应用程序项目,然后 BAL 引用 DAL。 数据访问不需要引用业务逻辑。

    【讨论】:

      【解决方案5】:

      这只是发生在我身上。你有一个循环依赖,即两个项目都相互引用。您需要使其中一个独立于另一个。这需要一些时间,而且发生得如此之快。前一秒我还在愉快地编码,下一秒我就遇到了 45 个这样的错误。只是花了一些时间,但它也使您的架构/程序结构变得更好,帮助您正确理清依赖关系。

      【讨论】:

        【解决方案6】:

        有时,您有两个不同的项目,每个项目都需要另一个项目拥有的方法。在这种情况下,您可以创建第三个项目并将共享代码移入其中,或者选择两个项目之一来放入共享代码。

        【讨论】:

        • 我认为这个答案是唯一正确的
        【解决方案7】:

        在我的例子中,我复制了一个项目文件而没有生成新的ProjectGuid。由于 Visual Studio 使用 ProjectGuid 唯一标识项目,因此它假定项目试图引用自身。

        【讨论】:

          【解决方案8】:

          当我在构建一个包含存储库接口层、存储库服务层、sql 服务层、rest 服务层和我的主要 WPF UI 层等多个层的 WPF 应用程序时,我遇到了这个问题。

          • 我解决了这个错误。我注意到有些图层是 不必要地引用其他项目。我删除了这个不必要的 参考。
          • 然后我注意到我的一些服务层和存储库层 有我的 WPF UI 项目作为参考(我的启动项目);这是 是什么创建了循环引用。我删除了这个。

          ================================================ ==========================

          结论:检查每个项目的引用依赖,确保没有不必要的引用。确保子层没有引用引用中的启动项目。

          希望我能有所帮助。

          【讨论】:

            【解决方案9】:

            在我的情况下,该项目已经在目标项目中的 csproj.cs 中以某种方式声明,所以我简单地删除了 csproj.cs 中的所有依赖项并尝试再次从主项目添加并且它起作用了

            【讨论】:

              【解决方案10】:

              要解决此问题,请在构建项目 DLL 后通过浏览来添加引用。不要从“项目”选项卡中选择它。

              【讨论】:

              • 在另一个项目的 bin 目录中添加对 DLL 的引用通常是一件非常糟糕的事情,特别是如果项目在同一个解决方案中并且您设置了构建服务器。会让人头疼。
              • 项目之间的循环依赖是一个非常糟糕的主意,并且会产生不可复制的构建。每次构建时,都会引用上一次构建中的 DLL。
              猜你喜欢
              • 2019-08-12
              • 1970-01-01
              • 1970-01-01
              • 2011-07-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多