Настраиваемое правило FxCop для реализации CA2241 против String.Format с использованием строкового ресурса? - PullRequest
1 голос
/ 12 октября 2011

CA2241: предоставить правильные аргументы для методов форматирования прекрасно работает, если вы не используете строковые ресурсы для аргумента форматной строки.

Кто-нибудь знает о каком-либо пользовательском правиле, которое делает то же самое для вызовов String.Format, которые используют ресурс для строкового формата?

Например, вместо этого (какое правило CC2241флаги):

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

Мне нужно правило, которое обнаруживает проблему, когда Resources.MessageWithTwoPlaceholder является ресурсом, определенным как "{0} {1}".

String.Format( Resources.MessageWithTwoPlaceholders, arg );

взглянул на написание собственного правила, чтобы справиться с этим, и выглядит выполнимым, но довольно значительным усилием.

1 Ответ

1 голос
/ 25 января 2012

Проблема с этим типом правила состоит в том, что строка формата может быть неправильной в более чем одной сборке, и не обязательно в анализируемой сборке.

Что делает его еще сложнее, так это то, что вы загружаете ресурс не из менеджера ресурсов, а из сгенерированного класса ресурсов, который абстрагируется от имени файла ресурса, имени имени ресурса и фактического значения. ресурса.

Еще одна проблема, с которой вы столкнетесь, заключается в том, что загрузка данных ресурса в память, вероятно, требует от вас фактической загрузки сборки вместо того, чтобы просто выполнять самоанализ, если вы не хотите анализировать ресурс самостоятельно. *

И, наконец, во многих условиях перевода файлы ресурсов создаются во время разработки только с одним языком, а переводы посткомпилируются и добавляются в продукт на более позднем этапе ...

Все, что сказано, должно быть возможно. найти контент сложно, но фактическое правило может быть скопировано из существующего кода.

...