Что не так с моим набором правил FXCop?
Я создаю несколько файлов наборов правил с одинаковыми идентификаторами правил, но с возрастающим уровнем включенных наборов правил MS и повышением серьезности действия для некоторых правил. У меня проблема в том, что VS2010 говорит мне, что произошла ошибка при загрузке моего файла FXCop_VS2010_HIGLevel2.ruleset, в то время как FXCop_VS2010_HIGLevel1.ruleset загружается нормально. По сути, они выглядят одинаково:
FXCop_VS2010_HIGLevel1.ruleset
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="HIG VS2010 Code Analysis Rules Level 1" Description="These rules expand on the basic design guideline rules to maximize the usability and maintainability issues that are reported. Extra emphasis is placed on naming guidelines. Consider including this rule set if your project includes library code or if you want to enforce the highest standards for writing maintainable code." ToolsVersion="10.0">
<Include Path="BasicCorrectnessRules.ruleset" Action="Default" />
<Include Path="SecurityRules.ruleset" Action="Default" />
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1000" Action="None" />
<Rule Id="CA1001" Action="None" />
...
<Rule Id="CA2239" Action="Warning" />
<Rule Id="CA2240" Action="None" />
<Rule Id="CA2242" Action="None" />
<Rule Id="CA2243" Action="None" />
</Rules>
</RuleSet>
FXCop_VS2010_HIGLevel2.ruleset
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="HIG VS2010 Code Analysis Rules Level 2" Description="These rules expand on the basic design guideline rules to maximize the usability and maintainability issues that are reported. Extra emphasis is placed on naming guidelines. Consider including this rule set if your project includes library code or if you want to enforce the highest standards for writing maintainable code." ToolsVersion="10.0">
<Include Path="BasicCorrectnessRules.ruleset" Action="Default" />
<Include Path="BasicDesignGuidelineRules.ruleset" Action="Default" />
<Include Path="SecurityRules.ruleset" Action="Default" />
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1000" Action="Warning" />
<Rule Id="CA1001" Action="None" />
...
<Rule Id="CA2239" Action="Warning" />
<Rule Id="CA2240" Action="None" />
<Rule Id="CA2242" Action="None" />
<Rule Id="CA2243" Action="None" />
</Rules>
</RuleSet>
Вы можете видеть, что они по сути одинаковы. Уровень 2 добавляет BasicDesignGuidelineRules.ruleset и изменяет действия над некоторыми правилами (т. Е. CA1000 переходит от "Нет" на уровне 1 к "Предупреждение" на уровне 2).
Это ошибка, которую я получаю от VS2010, когда я помещаю файл набора правил 2-го уровня в папку Static Analysis Tools\Rule Sets:
Есть идеи, почему это происходит? Я проходил XML-файл уровня 2 построчно и сравнивал файл с уровнем 1. Единственное отличие - это то, что я ожидал. Я использовал Notepad++ для отображения непечатаемых символов и ничего кроме CRLF в соответствующих местах. Я в тупике.
1 ответ
Как вы заметили в своем комментарии, вы сказали, что проблема была решена после изменения действий с CriticalWarning
в Warning
, а также CriticalError
в Error
,
Это поведение объясняется здесь: http://msdn.microsoft.com/en-us/library/dd380626.aspx
Вы, должно быть, ошибочно приняли действие за MessageLevel property
в пользовательских правилах XML-файлы. В этом свойстве вы можете установить следующие значения:
- Критическая ошибка - проблемы, о которых сообщается на этом уровне, имеют высокую видимость, и идентифицированный код не работает правильно в большинстве распространенных сценариев. Эти проблемы должны быть решены в первую очередь. Вы не должны исключать проблемы с этим уровнем.
- Ошибка - проблемы на этом уровне имеют меньшую видимость и влияние. Но он по-прежнему определяет проблемы в вашем коде, которые необходимо решить. Также эти вопросы не следует исключать без тщательного рассмотрения.
- Критическое предупреждение - этот уровень в основном используется для обеспечения удобства сопровождения вашего кода. Код работает правильно, но менее чем оптимально. Исключайте такие сообщения только после тщательного рассмотрения.
- Предупреждение. Сообщения с этим уровнем идентифицируют проблемы в вашем коде, связанные с ремонтопригодностью, расширяемостью и стабильностью.
- Информационные - информационные сообщения о коде.