FxCop自定义代码分析:检查另一个类中的类引用

时间:2013-03-25 06:38:54

标签: .net code-analysis fxcop

我正在编写自定义代码分析检查,其中我需要检查ASP .NET MVC应用程序中的Model类是否没有控制器类的引用。但我无法找到与如何检查我的控制器以供模型类参考相关的任何内容。

2 个答案:

答案 0 :(得分:0)

如果您使用访问者方法(http://binarycoder.net/fxcop/html/check_and_visit.html)来创建规则,则可以覆盖VisitMemberBinding方法以验证是否正在访问控制器类型的任何成员(假设您有办法确定特定目标类型是否有资格作为控制器。)

答案 1 :(得分:0)

.NET开发人员的工具NDepend特别适合编写这种静态分析检查(免责声明:我属于开发NDepend的团队

  • 我正在编写自定义代码分析检查,其中我需要检查ASP .NET MVC应用程序中的Model类是否没有控制器类的引用

NDepend允许通过C#LINQ查询编写自定义代码规则。提供200 default code rules周围。这种LINQ语法可以直接编写您要求的规则:

warnif count > 0
let modelClasses = Application.Namespaces.WithNameLike("Model").ChildTypes()
let controllerClasses = Application.Namespaces.WithNameLike("Controller").ChildTypes()

from modelClass in modelClasses.UsingAny(controllerClasses)
select new { modelClass, 
             controllerClassesUsed = modelClass.TypesUsed.Intersect(controllerClasses) 
}

显然,调整此规则很容易,也许您想通过不同的方式定义 modelClasses controllerClasses (从某个类派生,实现某个接口...)。

NDepend可以集成到VS 2012,2010,2008中,并具有编辑LINQ规则的功能,并可以实时浏览其结果。规则检查也可以集成到您的构建过程中,rules violation ca be shown in a report

enter image description here

  • 但我无法找到与如何检查我的控制器以供参考模型类相关的任何内容。

我不确定理解这个要求,你的意思是你想写一个规则来检查控制器类确实在使用模型类吗?

相关问题