1

CA2241:フォーマット文字列引数に文字列リソースを使用していない限り、フォーマット メソッドに正しい引数を提供することはうまく機能します。

文字列形式のリソースを使用する String.Format 呼び出しに対して同じことを行うカスタムルールを知っている人はいますか?

たとえば、これの代わりに (ルール CC2241 フラグ):

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

Resources.MessageWithTwoPlaceholders が "{0} {1}" として定義されたリソースであるという問題を検出するルールが必要です。

String.Format( Resources.MessageWithTwoPlaceholders, arg );

これを処理するためのカスタム ルールを作成する方法を調べてみたところ、実行可能に見えますが、かなりの労力が必要です。

4

1 に答える 1

1

このタイプのルールの問題は、解析対象のアセンブリとは限らず、複数のアセンブリで書式文字列が間違っている可能性があることです。

さらに難しいのは、リソース マネージャーからではなく、リソース ファイルの名前、リソース名の名前、およびリソースの実際の値を抽象化する、生成されたリソース クラスからリソースをロードしていることです。 .

遭遇するもう 1 つの問題は、リソース データをメモリに読み込むには、リソースを自分で解析する場合を除き、イントロスペクションを行うだけでなく、実際にアセンブリを実際に読み込む必要があることです。

最後に、多くの翻訳条件では、リソース ファイルは開発時に 1 つの言語だけでビルドされ、翻訳はポスト コンパイルされて、後の段階で製品に追加されます...

とはいえ、それは可能なはずです。コンテンツを見つけるのは難しいですが、実際のルールは既存のコードからコピーできます。

于 2012-01-25T09:18:53.837 に答える