自定义控件的FxCop自定义规则

时间:2012-07-20 14:07:50

标签: visual-studio-2010 c#-4.0 fxcop

在我的项目中,我使用自定义控件而不是普通的ASP.NET控件。我们已经在.NET上构建了一个架构,并且正在使用它的控件。

现在我需要编写一个自定义规则来检查是否正在使用某些Windows控件。原因是,我的团队需要仅限于我的自定义控件,这些控件旨在替换Windows控件。

示例:我需要搜索,如果他们正在使用System.Windows.Controls.Textbox .....我需要它是一个错误。

有人可以帮我解决问题吗?

我希望问题很明确.....如果需要进一步澄清,请告诉我。

2 个答案:

答案 0 :(得分:0)

这种规则的逻辑非常简单:

  1. 检查方法体,访问每个构造函数调用以查看是否 目标类继承自Control类。
  2. 如果是,请验证目标类是否在您的命名空间或程序集中(或者您最好将其标识为“您的”)。
  3. 这个比较简单。更大的问题是相关的构造函数通常会在设计器生成的代码中调用,大多数人在执行FxCop时倾向于忽略。要使规则起作用,您需要在分析中包含设计器生成的代码。

答案 1 :(得分:0)

工具NDepend让我们比使用FxCop更容易在.NET代码上编写自定义代码规则。 免责声明:我是该工具的开发人员之一

使用此工具,您可以在LINQ查询(名为CQLinq)上编写自定义代码规则。例如,您要求的查询可以使用CQLinq以这种方式编写:

// <Name>Don't use system controls</Name>
warnif count > 0

let systemControls = ThirdParty.Types.Where(
          t => t.DeriveFrom("System.Windows.Forms.Control".AllowNoMatch()))
where systemControls.Count() > 0

from t in systemControls 
let methodsThatCreateT = t.TypesUsingMe.ChildMethods().Where(m => m.CreateA(t))
select new { t, methodsThatCreateT }

在编辑此类代码规则时,会立即显示可浏览的结果(此处 3毫秒)。双击此结果中的任何类型或方法,跳转到Visual Studio中源代码中的声明:

CQLinq don't use system controls

提出了{p> 200 default code rules。该工具100%集成在Visual Studio 2012,2010和2008中。默认或自定义代码规则可以是validated inside Visual Studio,和/或在构建过程时间,{{3} }。