c#:实用程序以正确的顺序查找循环引用/编译?

任何人都知道一个好的实用程序或程序来询问所有项目的解决方案或目录,并告诉你循环引用的位置,并可能按顺序编译。

我记得前一段时间见过但我在任何地方都找不到它..

NDepend是一个很好的工具,可以做到这一点,还有更多。 也许这对你想要的东西来说太过分了,但是有一个试用版,所以看看……

我知道这是一个迟到的答案,但我发现使用GraemeF和tsilb的答案都显示两个程序集之间没有依赖关系。 看起来如果颠倒依赖关系的顺序( 程序集A引用B ,但是将它切换到B引用A ),它会在构建顺序中保留依赖关系。 要解决此问题,请打开解决方案的“属性”对话框,转到“公共属性”,然后转到“项目依赖项”。 找到程序集A并删除对程序集B的依赖性。 这将允许您正常添加引用。

您可以通过System.Reflection追踪依赖树。 在构建树时,在添加节点时,您将检查节点的任何父节点是否与您要添加的节点相同。 如果为true,则向用户抛出exception。

如果您的用户将成为了解程序集引用和exception如何工作的人 – 像开发人员这样的人:)那么抛出像这样的技术exception是可以的

如果在解决方案中的项目之间使用项目引用,则Visual Studio(或MSBuild)将自动确定正确的构建顺序。 如果您使用程序集引用,这当然会中断。此外,Visual Studio将阻止您添加循环项目引用。

我inheritance了一个巨大的视觉工作室解决方案,带有一些圆形参考路径。 我写了一个linqpad脚本来帮助找到循环引用链:

https://github.com/ronnieoverby/linqpad-utils/blob/master/Find%20circular%20references.linq

我的实现可能很幼稚,但它对我来说工作得相当快。