Visual Studio:帮助修复循环引用!

时间:2009-11-30 15:29:55

标签: .net visual-studio dll visual-studio-2005

Visual Studio 2005中是否有办法找到项目的所有引用?

我有一个包含多个项目(dll)的解决方案。当在项目B中引用时,项目A VS告诉我它不能添加此引用,因为“循环引用”。

但是,项目A不包含对B的直接引用。显然,A中有一个引用B的中间引用。

A <=?= B (circular ref.)

A =?=> X(?) =?=> B ( maybe there is an X that references B)

如何找到这个X?

===编辑(好奇):) 解决方案中有63个项目。

1 个答案:

答案 0 :(得分:5)

我强烈建议您使用NDepend,这是查找隐藏依赖项的好方法。该工具将帮助您找到代码中的所有难点。重构它最终取决于你。

处理循环依赖的标准方法,其中A引用B和B引用A,是拉取A和B引用的项并将它们放入单独的程序集C中,这样A引用C和B引用C,但C不引用A或B.

基于对您的问题的解读,我的猜测是您有很多静态方法或属性,您可以在整个地方使用它们。摆脱它们,或将它们全部移动到一切引用的项目中。我更喜欢前者;静态的东西往往难以进行单元测试。

  

MMM。有趣,有趣......那么“免费”“变通办法”呢? :)

重构,没有“解决方法”。 NDepend只是一个可以帮助你找到痛苦区域的工具;它不会为你做的工作。值得庆幸的是,它有一个免费试用版,可以帮助您解决当前的问题。

如果您不想使用它,您唯一的“解决方法”是通过搜索代码来查找循环引用。可能有助于您找到问题区域的一件事是从项目B中删除对项目A的引用并查看哪些中断,然后将它与从项目A中删除对项目B的引用时的中断进行比较。这些列表的并集应该给你一个起点。

但是你必须重构你的代码;没有远离那个。