任何人都知道一个好的实用程序或程序来询问所有项目的解决方案或目录,并告诉你循环引用在哪里以及可能按顺序编译。
记得前段时间看到过,但是到处都找不到。。
任何人都知道一个好的实用程序或程序来询问所有项目的解决方案或目录,并告诉你循环引用在哪里以及可能按顺序编译。
记得前段时间看到过,但是到处都找不到。。
NDepend是一个出色的工具,它可以做到这一点以及更多。也许这对你想要的东西来说有点过头了,但是有一个试用版,所以看看......
我知道这是一个迟到的答案,但我发现使用 GraemeF 和 tsilb 的答案都显示两个程序集之间没有依赖关系。看起来如果您颠倒依赖关系的顺序(Assembly A引用B,但您将其切换为B引用A),它将依赖关系留在构建顺序中。要解决此问题,请打开解决方案的“属性”对话框,转到“通用属性”,然后转到“项目依赖项”。找到Assembly A并删除对Assembly B的依赖。这将允许您正常添加引用。
您可以通过 System.Reflection 追踪依赖关系树。在构建树时,添加节点时,您将检查该节点的任何父节点是否与您正在添加的项目或程序集相同。如果为真,则向用户抛出异常。
如果您的用户将是知道程序集引用和异常如何工作的人 - 像开发人员这样的人,那么抛出这样的技术异常是可以的:)
如果您在解决方案中的项目之间使用项目引用,则正确的构建顺序将由 Visual Studio(或 MSBuild)自动确定。如果您使用程序集引用,这当然会中断。Visual Studio 也会阻止您添加循环项目引用。
我继承了一个巨大的视觉工作室解决方案,其中包含一些循环参考路径。我写了一个 linqpad 脚本来帮助找到循环引用链:
https://github.com/ronnieoverby/linqpad-utils/blob/master/Find%20circular%20references.linq
我的实现可能很幼稚,但对我来说工作得相当快。