FxCop хочет, чтобы я записал Имя пользователя с капиталом N (т.е. UserName), из-за него являющийся сложным словом. Однако из-за непротиворечивости обосновывает, что мы должны записать ее с нижним регистром n - так или имя пользователя или Имя пользователя.
Я попытался настроить CodeAnalysisDictionary.xml путем добавления следующего раздела к разделу:
<DiscreteExceptions>
<Term>username</Term>
</DiscreteExceptions>
Из того, что я понимаю, как пользовательские словари работают, это должно сказать FxCop рассматривать имя пользователя как дискретный термин и предотвращать CompoundWordsShouldBeCasedCorrectly (CA1702) проверка для увольнения ошибки.
К сожалению, это не работает. У кого-либо есть идея, почему это и как решить это? Я не хочу добавлять подавления, потому что это серьезно создало бы помехи файлу GlobalSuppressions, поскольку существует довольно много случаев.
Отредактированный для добавления: В настоящее время я решил это при помощи GlobalSuppressions, но дал природу проблемы, это не походит на идеальный способ решить это. Кто-либо может дать подсказку на том, где искать дополнительную информацию о том, как FxCop применяет правила, определенные в словаре?
<?php
// keywords are between *
$str = "PHP is the *best*, its the *most popular* and *I* love it.";
if(preg_match_all('/\*(.*?)\*/',$str,$match)) {
var_dump($match[1]);
}
?>
Вывод:
array(3) {
[0]=>
string(4) "best"
[1]=>
string(12) "most popular"
[2]=>
string(1) "I"
}
-121--2749663- restrict
стал ключевым словом в C99. Это реализация, посягающая на пространство имен пользователей. При наличии действительной программы C89, содержащей слово restrict
, необходимо изменить программу, чтобы она работала с C99. Другими словами: нет обратной совместимости. Если они собирались нарушить обратную совместимость, они должны были сначала удалить получает
из стандарта.
Я был разработчиком в группе анализа FxCop/Managed Code в течение 3 лет, и у меня есть ваш ответ. Все изменилось с моего времени, и я забыл, как именно работает обработка пользовательского словаря, и поэтому мне потребовалось довольно много времени, чтобы выяснить это.:)
Короткий ответ: вы должны удалить все ссылки на имя пользователя, имена пользователей, UserName и UserNames из C :\Program Files (x86 )\Microsoft FxCop
Обычно я не рекомендую этого, так как это не должно требоваться, но вы нашли то, что, по моему мнению, является ошибкой, и это единственный обходной путь, который я мог найти.
OK, теперь для длинного ответа...
Правило имеет две различные проверки, которые работают следующим образом:
FileName -- > {«file», «name»}
имя файла
считается допустимым словом), < Term CompoundAltive = «FileName» > имя файла
в разделе < Составное >
пользовательского словаря это означает, что
несмотря на то, что имя файла
является словом, руководство по проектированию (в значительной степени как кивок к согласованности
с предшествующим уровнем техники в Рамках, которые предшествовали существованию правила) настаивают на
должен быть записан как FileName
, и поэтому мы должны подавить предупреждение. < Исключения >
имеется запись < Term > имя файла
раздела пользовательского словаря, то считается, что, хотя «имя файла»
слово, это также могут быть два слова «file» и «name» в другом контексте. например.
Начало - это слово, но пользователь должен изменить DoTanOnSet
на
DoImentedNegth
будет шумом, и поэтому мы должны подавить предупреждение. Обратите внимание, что ваше предупреждение: Имя пользователя
должно быть Имя пользователя
обнаружено в части B,, который не находится в разделе ExecutionExceptions, поэтому вы не можете подавить предупреждение, изменив этот раздел. Проблема заключается в том, что в пользовательском словаре по умолчанию есть запись, в которой указано, что для username
всегда используется правильное имя пользователя UserName
. Его нужно каким-то образом удалить или переопределить.
Теперь идеальным решением будет оставить пользовательский словарь по умолчанию в покое, указать SeureFxCopDir = false
в файле проекта, а затем объединить только части пользовательского словаря по умолчанию в файле CustomDictionary.xml, который используется для проекта. К сожалению, это не работает, так как FxCop 1.36 игнорирует директиву SeureFxCopDir и всегда рассматривает ее как истинную. Я считаю, что это ошибка, но также возможно, что это было преднамеренное изменение, так как директива не задокументирована и не имеет соответствующего пользовательского интерфейса. Я, честно говоря, не знаю...
Учитывая, что FxCop всегда использует свой пользовательский словарь по умолчанию в дополнение к пользовательскому словарю проекта, вы можете удалить соответствующие статьи из пользовательского словаря по умолчанию.
Если у меня есть шанс, я свяжусь с текущей группой анализа кода, чтобы узнать, действительно ли это ошибка, и сообщу здесь...
В пользовательском словаре, который поставляется с FXCOP (расположен в моей системе в C: \ Program Files \ Microsoft FXCOP 1.36 \ customdixtionary.xml , но YMMV) в словах \ Соединения имеют <термин Compentalternate = «Имя пользователя»> Имя пользователя Term>
вход. Удалите это. Вам все еще нужно дискретное исключение.