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

c#:查找循环引用/按正确顺序编译的实用程序?,c#,circular-reference,C#,Circular Reference,doers任何人都知道一个好的实用程序或程序,可以查询所有项目的解决方案或目录,并告诉您循环引用的位置和可能的编译顺序 我记得不久前看到过一个,但我在任何地方都找不到它。您可以通过System.Reflection查找依赖关系树。在构建树时,添加节点时,应检查该节点的任何父节点是否与要添加的项目或程序集相同。如果为true,则向用户抛出异常 如果您的用户是了解程序集引用和异常如何工作的人,那么抛出这样的技术异常是可以的——像开发人员这样的人:)是一个很好的工具,可以做到这一点,而且可以做得更多。

doers任何人都知道一个好的实用程序或程序,可以查询所有项目的解决方案或目录,并告诉您循环引用的位置和可能的编译顺序


我记得不久前看到过一个,但我在任何地方都找不到它。

您可以通过System.Reflection查找依赖关系树。在构建树时,添加节点时,应检查该节点的任何父节点是否与要添加的项目或程序集相同。如果为true,则向用户抛出异常


如果您的用户是了解程序集引用和异常如何工作的人,那么抛出这样的技术异常是可以的——像开发人员这样的人:)

是一个很好的工具,可以做到这一点,而且可以做得更多。对于您想要的内容来说,这可能有些过分,但是有一个试用版,所以请查看…

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

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

我继承了一个巨大的visual studio解决方案,其中包含一些循环引用路径。我编写了一个linqpad脚本来帮助查找循环引用链:


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

>Visual Studio也会阻止您添加循环项目引用。这是一个很好的特性。如果您认为循环参考不止是一个两点参考(例如a->B->C->a),那么如果VS能够为您提供更多关于哪些参考会导致潜在循环参考的信息,那就更好了。