由于循环依赖错误,无法添加对项目的引用

Posted

技术标签:

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

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

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

谁能帮我解决这个错误?

【问题讨论】:

只需在 Google 快速搜索中尝试一些热门条目。 en.wikipedia.org/wiki/Circular_dependency。在***.com/questions/308915/… 的另一个关于 SO 的问题中有很好的解释 【参考方案1】:

您需要执行以下操作:

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

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

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

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

说明:

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

MVC 项目 -> BAL -> DAL

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

鉴于:

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

考虑以下事项: 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。

以上是关于由于循环依赖错误,无法添加对项目的引用的主要内容,如果未能解决你的问题,请参考以下文章

解决由于类之间的循环依赖而导致的构建错误

解决由于类之间的循环依赖而导致的构建错误

解决由于类之间的循环依赖而导致的构建错误

解决由于类之间的循环依赖而导致的构建错误

解决由于类之间的循环依赖而导致的构建错误

避免 grails 中的循环引用继承