Я недавно обновил свой проект из Visual Studio 2008 к Visual Studio 2010.
Путем включения Анализа кода я добираюсь, много предупреждений привело к правилу CA2204: Литералы должны быть записаны правильно.
Править:
Скажем, мне назвали метод GetResult()
, и в нем я хочу выдать исключение по некоторым причинам. Я хочу, чтобы исключение сказало "GetResult() has failed for some reason"
. Это даст мне предупреждение, так как GetResult не является словом. Я не получу предупреждение на имени метода GetResult()
, только если я поместил его в строку. Это вызвано тем, что Добираются, и Результат легальные слова.
Я не верю той записи GetResult() has failed for some reason
решение.
Править: В MSDN это говорит:
Это правило анализирует литеральную строку в слова, маркируя сложные слова, и проверяет написание каждого слова/маркера.
Не делает это означает, что GetResult должен быть проверен как два слова: "Добраться" и "Результат"?
Я должен подавить CA2204?
«Не удается инициализировать MyClass»
- не лучшее сообщение для разработчика, которое следует вводить в код. Он редко помогает при отладке и только сбивает с толку конечного пользователя, если когда-либо отображается.
В общем, я бы посоветовал не подавлять сообщение, потому что орфографическая ошибка заставляет выглядеть намного глупее, чем они есть на самом деле, и это не то сообщение, которое вы хотите передать своим приложением.
В этом конкретном экземпляре это действительно предупреждение о плохом сообщении об ошибке - либо сообщите пользователю, как исправить это, исправьте автоматически, либо укажите фактическую причину, по которой оно не инициализируется в вашем журнал ошибок.
РЕДАКТИРОВАТЬ: Включая правки OP
Из этого предупреждения вы можете понять, что вы не должны раскрывать детали кода как часть сообщения об ошибке (в первую очередь потому, что они будут включены в стек вызовов при регистрации исключения).
GetResult () не удалось по какой-то причине
Скажем, «какая-то причина» - это разрешения. Сообщение может выглядеть так:
У вас нет разрешения на просмотр этих результатов.
Нет необходимости упоминать конкретный метод, в котором произошел сбой, поскольку трассировка стека может регистрироваться автоматически.
Один из способов исправить это - не добавлять имя типа напрямую в строку. Вместо этого передайте его как параметр. Например
var msg = String.Format("Can't initialize {0}", typeof(MyClass).Name);
Это дает преимущество как обойти правило FxCop, так и быть безопасным для рефакторинга.
Может быть, вам не следует помещать имя класса в литерал? Что насчет использования или определения исключения, которое может быть брошено вот так:
throw new CantInitializeClassException(innerException, typeof(MyClass);
Моя идея заключалась в том, чтобы перенести больше информации на более конкретные исключения из более общих. Я предлагаю использовать пример выше вместо throw new ApplicationException("Cant initialize MyClass");