Я был разработчиком в группе анализа FxCop / Managed Code в течение 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>
раздел пользовательского словаря, то это означает, что, хотя «имя файла»
Одним словом, это могут быть также два слова «файл» и «имя» в другом контексте. например
Начать - это слово, но попросить пользователя изменить DoSomethingOnSet
на
DoSomethingOnset
будет шумом, и поэтому мы должны подавить предупреждение.
B. Проверьте отдельные слова, которые должны быть составными:
- Взяв жетоны из А.1, проверьте каждый из них по отдельности на соответствие составу.
термины в пользовательском словаре.
- Если есть совпадение, мы должны предупредить в соответствии с интерпретацией в шаге A.4.
Обратите внимание, что ваше предупреждение: Username
должно быть UserName
обнаружено в части B, которая не относится к разделу DiscreteExceptions, поэтому вы не можете подавить предупреждение, изменив этот раздел. Проблема заключается в том, что в пользовательском словаре по умолчанию есть запись о том, что правильный регистр для username
всегда равен UserName
. Его нужно как-то удалить или переопределить.
Жук
Теперь идеальным решением было бы оставить пользовательский словарь по умолчанию в одиночку, указать SearchFxCopDir=false
в файле проекта, а затем объединить только те части пользовательского словаря по умолчанию, которые вы хотите использовать в используемом CustomDictionary.xml. для вашего проекта. К сожалению, это не работает, так как FxCop 1.36 игнорирует директиву SearchFxCopDir и всегда рассматривает ее как true. Я считаю, что это ошибка, но также возможно, что это было преднамеренное изменение, так как директива не задокументирована и не имеет соответствующего пользовательского интерфейса. Я, честно говоря, не знаю ...
Заключение
Учитывая, что FxCop всегда использует свой пользовательский словарь по умолчанию в дополнение к пользовательскому словарю проекта, единственным выходом для вас является удаление соответствующих записей из пользовательского словаря по умолчанию.
Если у меня будет возможность, я свяжусь с текущей командой по анализу кода, чтобы выяснить, действительно ли это ошибка, и сообщу здесь ...