2010-01-12 201 views
20

我有2个项目。循环依赖关系

项目#2具有参考到Project#1

现在我需要引用项目#2项目#1,但vs.net抱怨的循环依赖关系。

有没有办法呢?

+2

至少我们都同意我们的答案.. ;-)。 +1给所有人 – David 2010-01-12 21:39:01

回答

52

绝对不是。循环依赖关系表示设计不好。我不是故意要苛刻。有一些方法可以解决这个问题。

1)您可以重构公共代码到另一个项目,说项目#0

2)您可以修复你的设计,这可能是要走的路。

鲍伯叔叔在包装原则方面有一篇很好的文章,其中包括非循环依赖原则。 http://www.objectmentor.com/resources/articles/granularity.pdf。阅读这个知道为什么循环依赖是一件坏事。

+1

一个常见的解决方法是依赖抽象如接口而不是具体实例,并将这些抽象移动到另一个程序集。但是,真的,想想你的项目结构和真正属于哪里。 – kyoryu 2010-02-14 20:42:53

+0

对于链接的文章。我将一个包含“应用程序使用日志”类集和一个“错误日志记录”类的“Logger”软件包分成两个单独的软件包(大多数软件包不需要记录应用程序使用!),然后将WAS回到原来的圆形。回到DAG。应该被要求阅读所有。 – DFTR 2013-04-01 21:50:49

+0

@kyoryu你在谈论他在文章中提到的依赖倒置原则(DIP)吗? - 我同意,你应该试着找出为什么存在循环依赖的可能性,并且可能在取决于抽象之前改变设计的元素(如果可以的话)。 – DFTR 2013-04-01 21:54:40

5

将两者合并或重新设计。

4

号码结构正确的项目。尝试使用某种基于抽象的排序 - 从低级到高级。

5

这表明您的设计存在问题。如果真的需要两个或更多的类型相互了解,那么它们应该存在于同一个程序集中。

+0

如果他们需要使用不同的语言? – Joshua 2016-08-04 21:03:11

+0

你能举个例子吗? – 2016-08-04 22:04:05

+0

[已过时的示例:]在VS 2008中,只有VB .NET可以使用异常过滤器,而只有C#可以使用Linq表达式。不难想象这些情况出现在冲突的设置中。 – Joshua 2016-08-04 23:08:00

10

重构您的项目以将共同元素带入项目#1和项目#2引用的“项目#0”。

2

真的并不意味着一个聪明,但更好的程序设计是答案。

3

循环依赖意味着这些不再是两个独立的项目(因为不可能只构建其中的一个)。

您需要重构,以便只有单向依赖关系,或者您应该将它们合并到单个项目中。

3

循环引用可以完成如在previous question见过,但你不应该做的原因,每个人都在这里已经提到它。

1

这似乎是一个设计缺陷,没有别的。重新设计是解决方案。

-4

我不认为这是一个很好的解决方案,但我们仍然可以通过以下步骤

  • 做添加引用
  • 浏览和
  • 去DLL项目的Debug文件夹,
  • 找到.dll和Add。
+2

不要那样做!遵循接受的答案中指出的内容! – 2013-03-29 14:02:06