2011-11-16 64 views
6

如果调用某个方法,是否有创建编译时错误的方法?阻止.NET代码调用特定方法?

作为一个例子,我想要做的就是防止某个项目中的代码调用System.Configuration.ConfigurationManager.AppSettings()。如果调用该方法,是否有办法标记项目或类文件以引发编译时错误?

我不认为有这样的想法,所以我的想法是,唯一的办法是生成一个FxCop规则来标记这些调用,并且这样做,但我愿意接受其他想法。

我正在使用.NET 3.5。不知道4.0代码合同是否可以做到这一点。

更新

我特别谈到框架的方法,而不是我自己,所以我不能将其标记为已过时。

在这一点上,我不在乎反思。

另一个例子是System.Web.HttpUtility.HtmlEncode,我想用微软的AntiXss库找到并替换它,但是我想在我的构建服务器上集成某种检查过程来检查新代码。

+0

你想禁止通过反射来调用这个方法吗? – Vlad

+1

如果它是你自己的程序集,并且你可以重新编译,你可以使用Obsolete属性,如果有帮助的话。 – asawyer

+0

如果你不想让他们使用它,为什么要开始? –

回答

2

该工具NDepend可用于该(免责声明:我是工具的开发人员之一)。

您可以编写一些Code Rules over LINQ Queries (CQLinq)来检查任何类型的依赖关系,例如方法调用。在每次编译成功后,代码规则可以是checked in Visual Studio,或者也可以是rules can be checked at build process time

这种CQLinq码规则可以看起来像:

warnif count > 0 
from m in Application.Methods   
where m.IsUsing("System.Configuration.ConfigurationManager.get_AppSettings()") 
select m 

该规则可以专门随心所欲,禁止用于匹配正则表达式的是,以包含调用get_AppSettings() getter方法方法例如名称空间:

warnif count > 0 
from m in Application.Namespaces.WithNameLike("regex").ChildMethods() 
where m.IsUsing("System.Configuration.ConfigurationManager.get_AppSettings()") 
select m 

从NDepend的dependency matrixdependency graph,您也可以右键单击一个依赖(基质细胞或曲线箭头),如果产生依赖存在,警告代码规则(然后专门治根如果你需要的话:)

enter image description here

+0

我只用过NDepend UI。我将不得不检查是否可以将它集成到我们的CruiseControl.NET/NAnt构建脚本中。那可能吗? – slolife

+0

是的,请阅读我们的CC.NET集成相关文档:http://www.ndepend.com/Doc_CI_CCNet.aspx –

4

你可以write your own rules in FxCop所以也许这是一个选项。

但是,在这种情况下,对于现有的代码库,您可能会发现在编辑器中用于“ConfigurationManager.AppSettings”的Ctrl-F(查找)功能可能做得相当不错,以便将来的实施,尽管您可能会考虑一个更加人性化的电子邮件备忘录的路线给开发团队......

正如上面的评论者强调的,值得注意的其他人有类似的目标,是如果这是指一个函数在你自己的代码库中(这个问题是而不是所指的),你可以使用[Obsolete]属性。

+0

尽管我同意电子邮件**应**,但我希望在验证方面更具体一些。 – slolife

+1

也许会告诉团队他们欠了6包啤酒给团队的其他成员打破编码标准!非常严肃的是,使用自定义规则的FxCop会帮助您验证它,但是只要开发者(或构建服务器)安装规则并正确使用FxCop,只有这样... – Reddog

相关问题