Ответ 1
Я был разработчиком команды FxCop/Managed Code Analysis в течение 3 лет, и у меня есть ваш ответ. С моего времени все изменилось, и я забыл, как работает пользовательская обработка словарей, и поэтому мне потребовалось немало времени, чтобы понять это.:)
Резюме
Короткий ответ: вам нужно удалить все ссылки на имя пользователя, имена пользователей, имя пользователя и имена пользователей из C:\Program Files (x86)\Microsoft FxCop 1.36\CustomDictionary.xml.
Обычно я бы не рекомендовал это, поскольку это не должно требоваться, но вы обнаружили, что я считаю ошибкой, и это единственное обходное решение, которое я мог найти.
Полная история
ОК, теперь для длинного ответа...
Правило имеет две различные проверки, которые работают следующим образом:
A. Проверьте составные слова, которые должны быть дискретными
- Разделить идентификатор на токены:
FileName --> { "file", "name" }
- Проверка орфографии каждой соседней пары токенов.
- Если проверка орфографии завершается успешно (например,
filename
считается действительным словом),
то мы нашли потенциальную проблему, поскольку одно слово не должно быть выражено как два токена. - Однако, если есть
<Term CompoundAlternate="FileName">filename</Term>
в разделе<Compound>
пользовательского словаря, тогда это означает, что хотяfilename
- это слово, руководящие принципы проектирования (в основном, как знак согласованности с предшествующим уровнем техники в Структуре, которая предшествует существованию правила) настаивают на этом должен быть записан какfilename
, поэтому мы должны подавить предупреждение. - Кроме того, если в
<DiscreteExceptions>
есть запись<Term>filename</Term>
раздел пользовательского словаря, тогда это означает, что хотя имя файла слово, это может быть также два слова "файл" и "имя" в другом контексте. например Onset - это слово, но просит пользователя изменитьDoSomethingOnSet
наDoSomethingOnSet
будет шумом, поэтому мы должны подавить предупреждение.
В. Проверьте наличие дискретных слов, которые должны быть сложными:
- Принимая маркеры из A.1, проверяйте каждый отдельно по отношению к набору соединений терминов в пользовательском словаре.
- Если есть совпадение, тогда мы должны предупредить в соответствии с интерпретацией на шаге A.4.
Обратите внимание, что ваше предупреждение: Username
должно быть Username
обнаружено в части B, которая не относится к разделу DiscreteExceptions, поэтому вы не можете подавить предупреждение, изменив этот раздел. Проблема в том, что пользовательский словарь по умолчанию имеет запись о том, что правильный код для Username
всегда Username
. Его нужно как-то удалить или переопределить.
Ошибка
Теперь идеальным решением было бы оставить только пользовательский словарь по умолчанию, указать SearchFxCopDir=false
в файле проекта, а затем объединить только те части пользовательского словаря по умолчанию, который вы хотите использовать в CustomDictionary.xml, который используется для вашего проекта. К сожалению, это не работает, так как FxCop 1.36 игнорирует директиву SearchFxCopDir и всегда рассматривает ее как истину. Я считаю, что это ошибка, но также возможно, что это было преднамеренное изменение, поскольку директива не документирована и не имеет соответствующего пользовательского интерфейса. Я честно не знаю...
Заключение
Учитывая, что FxCop всегда использует свой пользовательский словарь по умолчанию в дополнение к пользовательскому словарю проекта, ваш единственный способ - удалить соответствующие записи из пользовательского словаря по умолчанию.
Если у меня есть шанс, я свяжусь с текущей командой анализа кода, чтобы узнать, действительно ли это ошибка, и отчитайтесь здесь...