需要帮助为string.Format(...)创建自定义FxCop规则

时间:2011-09-14 10:36:10

标签: fxcop

请告诉我如何为以下“String.Format()”方法参数验证编写FxCOP自定义规则。

1.string.Format(“{0} aaaa {1} bbb”,x); // {1}没有占位符替换

2.string.Format(“aaaa {1} bbb”,x); // {1}没有占位符替换。在字符串文字内部,它应该是{0}而不是{1}。

此致

兰吉特。

3 个答案:

答案 0 :(得分:3)

在FxCop 1.35,CA2241中有一条规则来检查这一点 - 为格式化方法提供正确的参数。根据{{​​3}},由于删除了[数据流引擎],它已从FxCop 1.36“中删除。

规则似乎已恢复用于Visual Studio 2010的代码分析(请参阅Nicole Calinoiu的回答),但正如我在评论中提到的,Code Analyis仅适用于Premium和Ultimate版本。

因此,如果要检查程序集是否有对String.Format的错误调用,并且您没有Visual Studio 2010 Premium或Ultimate,则需要使用FxCop 1.35。我在Windows 7机器上并排运行FxCop 1.35和FxCop 10.0没有任何问题。

答案 1 :(得分:1)

通过阅读string.Format() MSDN文档,这两种情况不应该在运行时引发FormatException错误吗?

我的理解是,FxCop不是针对运行时错误的有效代码而设计的,而是针对潜在的安全性/性能/命名/等问题分析程序集并报告这些问题。运行时错误超出了它的能力范围。

答案 2 :(得分:1)

是否有某些特殊原因需要自定义规则? FxCop附带的ProvideCorrectArgumentsToFormattingMethods规则已经验证了String.Format参数。