首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FxCop自定义控件的自定义规则

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

Stack Overflow用户
提问于 2012-07-20 22:07:50
回答 2查看 302关注 0票数 1

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

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

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

有人能帮我解决代码问题吗?

我希望问题是清楚的……如果需要进一步澄清,请让我知道。

EN

回答 2

Stack Overflow用户

发布于 2012-07-20 22:43:49

这类规则的逻辑相当简单:

  1. 检查方法体,访问每个构造函数调用,以查看目标类是否从基控件类继承。
  2. 如果继承,请验证目标类是否在您的命名空间或程序集中(或者以最佳方式将其标识为“您的”)。

这是相对简单的。一个更大的问题是,相关的构造器通常会在设计器生成的代码中调用,而大多数人在执行FxCop时倾向于忽略这一点。要使您的规则生效,您需要在分析中包含设计器生成的代码。

票数 0
EN

Stack Overflow用户

发布于 2012-07-22 05:54:34

使用工具NDepend,我们可以在.NET代码上编写自定义代码规则,这比使用FxCop要容易得多。免责声明:我是该工具的开发者之一

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

代码语言:javascript
复制
// <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的源代码中的声明:

提出了200 default code rules协议。该工具100%集成在Visual Studio 2012、2010和2008中。默认或自定义代码规则可以是validated inside Visual Studio,和/或在构建过程时,在generated HTML+javascript report中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11581052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档