【发布时间】:2016-10-12 16:01:09
【问题描述】:
我正在努力在多个独立的子项目之间拆分一个存储库。所有项目都引用了一个大型项目。我正在寻找一种方法来获取共享项目中仅在其中一个子项目中使用的类列表,以便构建可以从共享项目中删除的候选类列表。最终目标是共享项目只包含共享代码。
我可以使用反射来做很多这样的事情,但是我有一个 NDepend 许可证,而且这似乎是我应该能够使用 NDepend 做的事情。我将如何使用 NDepend 执行此操作?
【问题讨论】:
我正在努力在多个独立的子项目之间拆分一个存储库。所有项目都引用了一个大型项目。我正在寻找一种方法来获取共享项目中仅在其中一个子项目中使用的类列表,以便构建可以从共享项目中删除的候选类列表。最终目标是共享项目只包含共享代码。
我可以使用反射来做很多这样的事情,但是我有一个 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 也可以提供帮助,首先将程序集用户导出到矩阵列。
第二次将你的程序集类型导出到矩阵rows,可以用这样的代码查询,这次只需将结果类型导出到rows,
let myAsm = Application.Assemblies.WithName("YourAsmName").Single()
from t in myAsm.ChildTypes select t
现在您可以探索所有依赖项,并深入研究它们。
当然,您可以细化这些代码查询,以便在查询结果和矩阵中准确获得您需要的内容。
如果你有几十个程序集和类型,你可以尝试导出到NDepend dependency graph而不是导出到矩阵,但是如果节点太多可能看起来很乱,矩阵更适合处理许多节点.
【讨论】: