检测.NET中名称空间之间的依赖关系

Mar*_*ath 7 .net dependencies coupling

是否有任何实用程序可以检查一组托管程序集,并告诉您一个名称空间中的任何类型是否依赖于另一个名称空间中的任何类型?例如,假设我有一个MyApp.BusinessRules命名空间,并且不希望它直接访问任何内容MyApp.GUI,但两个命名空间都在同一个程序集中.我的目标是能够编写一个自定义MSBuild任务,以验证各种耦合规则是否已被破坏.

到目前为止,我遇到的唯一一个看起来可能会这样做的工具是NDepend,但我想知道是否有更简单的解决方案.

Pat*_*eam 3

到目前为止,我遇到的唯一看起来可以做到这一点的工具是 NDepend,但我想知道是否有更简单的解决方案。

我是NDepend工具的开发者之一。请告诉我们您在 NDepend 中发现什么复杂以及您如何为您设想一个更简单的解决方案?

NDepend 提供了 3 种不同的方法来完成您想要的操作:依赖关系矩阵依赖关系图,您还可以通过 LINQ 查询 (CQLinq) 编写一些代码规则和规则来检测命名空间之间的循环,或强制执行某些特定的依赖关系。

例如,假设我有一个 MyApp.BusinessRules 命名空间,并且不希望它直接访问 MyApp.GUI 中的任何内容,但两个命名空间都位于同一程序集中。

为此,可以编写以下 CQLinq 规则,是否可以比这更简单?:

warnif count > 0
let businessRules = Application.Namespaces.WithNameLike("^MyApp.BusinessRules")
let gui = Application.Namespaces.WithNameLike("^MyApp.GUI")

from n in businessRules.UsingAny(gui)
let guidNamespacesUsed = n.NamespacesUsed.Intersect(gui)
select new { n, guidNamespacesUsed }
Run Code Online (Sandbox Code Playgroud)