如何使用 NDepend 拆分共享程序集?

How to use NDepend to split a shared assembly?

我正在努力在多个主要是独立的子项目之间拆分一个回购协议。所有项目都引用一个大项目。我正在寻找一种方法来获取仅在一个子项目中使用的共享项目中的 类 列表,以便构建可以从中删除的 类 候选列表共享项目。最终目标是共享项目只包含共享代码。

我可以使用反射做很多这样的事情,但我有 NDepend 许可证,看起来我应该可以使用 NDepend 做这件事。我将如何使用 NDepend 执行此操作?

你可以用一个 CQLInq code query

let myAsm = Application.Assemblies.WithName("YourAsmName").Single()
from a in Application.Assemblies where a.IsUsing(myAsm)
select new { 
   a, 
   typesUsed = myAsm.ChildTypes.UsedBy(a) }

瞧瞧!

当然 NDepend dependency matrix 也可以提供帮助,首先将程序集用户导出到矩阵

second export your assembly types to matrix rows,这可以用这样的代码查询,这次只需将结果类型导出到rows ,

let myAsm = Application.Assemblies.WithName("YourAsmName").Single()
from t in myAsm.ChildTypes select t

现在您可以探索所有依赖项,并深入研究它们。

当然,您可以优化这些代码查询,以在查询结果和矩阵中准确获得您需要的内容。

如果你有几十个程序集和类型,你可以尝试导出到 NDepend dependency graph 而不是导出到矩阵,但是节点太多可能看起来很乱,矩阵更适合处理很多节点。