Visual Studio加载项,用于验证string.Format方法

时间:2011-01-12 14:42:44

标签: c# visual-studio string-formatting vsx

string.Format是一种风险很大的方法。有很多事情可能出错,没有任何编译错误:

string.Format("{0{", text);
string.Format("{1}", text);
string.Format("(0)", text);
string.Format("{0}", text1, text2);

我正在寻找一种在编译时找到这个问题的方法。如果我没记错的话,Resharper会发现其中的一些错误,但它对我的血液来说太丰富了。

3 个答案:

答案 0 :(得分:2)

Resharper为您做到这一点 - 即使在编辑时: - 。)。

但要注意像

这样的事情
String.Format("{0} blabla", foo, bar);

不要生成错误(毕竟,决定隐藏一个值是完全正常的。)

答案 1 :(得分:1)

.NET2.0的字符串格式验证

经过一些研究,我发现 FxCop已经包含了一个规则,用于字符串格式检查(Usage Rules\Provide correct arguments to formatting methods)。它甚至可以识别@Sklivvz答案中的例子。不幸的是:

  1. 该规则仅存在于旧的1.35版本中,但不存在于1.36中(请参阅:Discontinued FxCop rules in V1.36)。
  2. 代码中存在的 lambda表达式不会产生规则错误或异常消息。 只是停止检查而不通知。我猜这是因为V1.35使用的是.NET运行时2.0。
  3. 该规则仅涵盖 Console.WriteConsole.WriteLinestring.Format& StringBuilder.AppendFormat我设法调整它(使用Reflector)也覆盖Common.Logging.ILog.DebugFormat,但我很确定它与MS EULA相矛盾(“你可能不会反向工程,反编译,或者拆卸...“)。
  4. 因此,您可以安全地使用FxCop测试.NET2.0应用程序中的字符串格式。


    但是较新的.NET版本呢?

    对于所有使用更多最新版本的人,我编写了一个StyleCop规则,用于检查常见格式错误模式的字符串文字。它远非完美,并产生许多误报,但仍然包括分配。

    我想查看新的FxCop SDK以获得更全面的解决方案。

    我会在这里发表我的结论。

答案 2 :(得分:0)

Resharper将帮助您识别它但是它很重,如果您正在使用现有的应用程序,必须小心使用。