自定义FxCop规则使用字符串资源对String.Format实现CA2241?

时间:2011-10-11 22:14:02

标签: c# resources localization fxcop string.format

CA2241: Provide correct arguments to formatting methods除非您使用字符串资源作为格式字符串参数,否则效果很好。

有没有人知道那里的自定义规则对使用字符串格式的资源的String.Format调用做了同样的事情?

例如,而不是这个(规则CC2241标志):

String.Format( "{0} {1}", value );

我需要一个规则来检测Resources.MessageWithTwoPlaceholders是一个定义为“{0} {1}”的资源的问题。

String.Format( Resources.MessageWithTwoPlaceholders, arg );

我已经看过编写一个自定义规则来处理这个问题,看起来很可行,但这是一个相当重要的工作。

1 个答案:

答案 0 :(得分:1)

此类规则存在的问题是格式字符串在多个程序集中可能出错,而不一定是要分析的程序集。

更难的是,您不是从资源管理器加载资源,而是从生成的资源类加载资源,该资源类抽象出资源文件的nae,资源名称的名称和实际值资源。

您将要遇到的另一个问题是,将资源数据加载到内存中可能需要您实际加载程序集,而不是仅仅对其进行内省,除非您想自己解析资源。

最后,在许多翻译条件下,资源文件仅在开发时使用一种语言构建,翻译后期编译并在稍后阶段添加到产品中......

所有这一切,应该是可能的。查找内容很难,但可以从现有代码中复制实际规则。