请告诉我如何为以下“String.Format()”方法参数验证编写FxCOP自定义规则。
1.string.Format(“{0} aaaa {1} bbb”,x); // {1}没有占位符替换
2.string.Format(“aaaa {1} bbb”,x); // {1}没有占位符替换。在字符串文字内部,它应该是{0}而不是{1}。
此致
兰吉特。
答案 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参数。