2011-09-14 17 views
2

次の "String.Format()"メソッドのパラメータ検証のためのFxCOPカスタムルールの記述方法を教えてください。string.Format(...)のカスタムFxCopルールを作成する際に助けが必要

1.string.Format( "{0} aaaa {1} bbb"、x); // {1}にはプレースホルダーの置き換えがありません。

2.string.Format( "aaaa {1} bbb"、x); // {1}にはプレースホルダ置換がありません。文字列リテラルの内部では、{1}ではなく{0}だったはずです。

ありがとう、

Ranjeet。

答えて

1

MSDNのドキュメントstring.Format()を読むと、これらのシナリオの両方で、実行時にFormatExceptionエラーが発生することはありませんか?

私の理解では、FxCopは実行時エラーのコードを有効にするのではなく、潜在的なセキュリティ/パフォーマンス/ネーミング/ etcの問題を分析するためにアセンブリを分析して報告します。ランタイムエラーはその機能を超えています。

+1

実行時例外を引き起こす可能性のある条件は、静的解析によって実際に検出可能です。間違った書式引数はこのカテゴリに当てはまります。 –

+0

@ニコール私の間違い、訂正のおかげで。 –

1

カスタムルールが必要な特別な理由はありますか? FxCopに付属するProvideCorrectArgumentsToFormattingMethodsルールは、String.Format引数を既に検証しています。

+0

こんにちはNicole、私はFxCOP 10を使用しています、私はこのルールを見つけることができませんでした。だから私は実行時までフォーマットの例外を見つけることができません。 ランジット。 – Ranjeet

+0

@Nicole Calinoiu - リンク先のルールは、Visual Studio 2010のコード分析の一部です。コード分析は、PremiumエディションとUltimateエディションでのみ利用できます。 Ranjeetが述べているように、ルールはFxCop 10の一部ではありません。 –

3

FxCop 1.35、CA2241でこれをチェックするルールがありました。 - 書式設定メソッドに正しい引数を提供しました。 this blog postによる[the] data flow engineの削除のためにFxCop 1.36 "から削除されました。

このルールは、Visual Studio 2010のコード分析(Nicole Calinoiuの答えを参照)のために復活したようですが、コメントで述べたように、Code AnalyisはPremiumとUltimateエディションでのみ使用できます。

したがって、Visual Studio 2010 PremiumまたはUltimateを使用していないString.Formatの呼び出しが不適切であることをアセンブリで確認するには、FxCop 1.35を使用する必要があります。私はFxCop 1.35とFxCop 10.0をWindows 7のボックスに何も問題なく並べて実行しています。

関連する問題