我正在尝试分析一个应用程序,其中程序集引用应该是一个有向非循环图,但不是。还有一个相关的问题,即子组件引用了一个子组件的不同版本(think Escher...)
我想要做的是分析每个装配 - 子装配对,并建立一个错误位置的图片。
我需要一些关于什么是好的数据结构的指导。我不太确定我可以构建一个不可变的那个,但是我不介意在内部将它变为可变,然后在最后转换为不可变的。
问题的另一部分是我应该使用什么样的算法来填充数据结构,以及之后用于“分析”问题。
答案 0 :(得分:3)
您可以使用NDepend,它会分析您的程序集并检测依赖项周期。
如果您真的想自己这样做,我会使用QuickGraph来建模依赖图,它还包括图算法,如拓扑排序。
答案 1 :(得分:2)
我不介意在内部将其变为可变,然后在最后转换为不可变。
您可能会发现在整个过程中使用不可变数据结构更容易。特别是,您可以轻松地将图表表示为从源节点到目标节点集的Map
。对于拓扑排序,您希望有效访问目标节点的源节点,因此您可能希望使用另一个Map
向相反方向扩充图形。
我刚刚用F#实现了这个,拓扑排序只有12行代码......: - )
答案 2 :(得分:1)
您想要做的是“拓扑排序”。维基百科有一个很好的概述: