【问题标题】:Visual Studio: Help to fix circular reference!Visual Studio:帮助修复循环引用!
【发布时间】:2009-11-30 15:29:55
【问题描述】:

在 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 个项目。

【问题讨论】:

  • 只是出于好奇,您的解决方案中有多少个项目?
  • 解决方案中的 63 个项目... :)

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


【解决方案1】:

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

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

根据对您的问题的阅读,我的猜测是您有很多静态方法或属性,您到处都在使用它们。摆脱它们,或将它们全部移至所有内容都引用的单个项目中。我更喜欢前者;静态的东西往往难以进行单元测试。

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

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

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

但是你将不得不重构你的代码;没有办法摆脱它。

【讨论】:

  • +1:NDepend 是解决这种情况的一个很好的起点。
  • 嗯。有趣,有趣......“免费”“变通办法”呢? :)
  • 免费 $$ 全部手动完成。是时间还是 $$,由您选择。
  • 如何分析Visual Studio生成的“Solution Generation”日志?!。
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2016-09-18
相关资源
最近更新 更多