Поделиться через


Набор правил "Расширенные правила определения правильности" для управляемого кода

Набор правил "Расширенные правила определения правильности корпорации Майкрософт" позволяет получить уведомление о максимальном числе ошибок логики и использования платформы при анализе кода.Особое внимание уделяется конкретным сценариям, таким, как COM-взаимодействие и мобильные приложения.Этот набор правил следует включать, если к проекту применим один из этих сценариев, или для поиска дополнительных ошибок в проекте.

В наборе правил "Расширенные правила определения правильности корпорации Майкрософт" содержатся правила из набора "Базовые правила определения правильности корпорации Майкрософт"В наборе базовых правил определения правильности содержатся правила из набора "Минимальные правила и рекомендации корпорации Майкрософт"Дополнительные сведения см. в разделах Набор правил "Базовые правила определения правильности" для управляемого кодаи Набор правил "Рекомендуемые правила для управляемого кода".

В следующей таблице описываются все правила в наборе правил "Расширенные правила определения правильности корпорации Майкрософт"

Правило

Описание

CA1001

Типы, которым принадлежат освобождаемые поля, должны быть освобождаемыми

CA1009

Правильно объявите обработчики событий

CA1016

Пометьте сборки атрибутом AssemblyVersionAttribute

CA1033

Методы интерфейса должны быть доступны для вызова дочерним типам

CA1049

Типы, которым принадлежат собственные ресурсы, должны быть освобождаемыми

CA1060

Переместите P/Invokes в класс NativeMethods

CA1061

Не скрывайте методы базового класса

CA1063

Следует правильно реализовывать IDisposable

CA1065

Не вызывайте исключения в непредвиденных местах

CA1301

Избегайте повторяющихся сочетаний клавиш быстрого доступа

CA1400

Необходимо наличие точек входа P/Invoke

CA1401

Методы P/Invoke не должны быть видимыми

CA1403

Типы макета Auto не должны быть видимыми для COM

CA1404

Вызовите GetLastError сразу после P/Invoke

CA1405

Базовые типы, относящиеся к типу видимых COM-клиенту, должны быть видимыми для COM

CA1410

Методы регистрации COM должны быть согласованы

CA1415

Правильно объявите методы P/Invoke

CA1821

Удалите пустые методы завершения

CA1900

Поля типа значения должны быть переносимыми

CA1901

Объявления P/Invoke должны быть переносимыми

CA2002

Не блокируйте объекты со слабой идентификацией

CA2100

Проанализируйте SQL-запросы с целью выявления уязвимостей безопасности

CA2101

Укажите тип маршалинга для строковых аргументов P/Invoke

CA2108

Проверьте объявляемые параметры безопасности типов значений

CA2111

Указатели не должны быть видимыми

CA2112

Защищенные типы не должны предоставлять поля

CA2114

Безопасность метода должна быть надмножеством типа

CA2116

APTCA-методы должны вызывать только APTCA-методы

CA2117

APTCA-типы должны расширять только базовые APTCA-типы

CA2122

Не используйте косвенное представление методов с требованиями ссылки

CA2123

Переопределяющие требования ссылки должны быть идентичны базовым

CA2124

Ограничьте уязвимые предложения finally во внешних блоках try

CA2126

Для требований ссылок на тип необходимы требования наследования

CA2131

Критические с точки зрения безопасности типы могут не участвовать в эквивалентности типов

CA2132

Конструкторы по умолчанию должны быть по меньшей мере такими же критическими, как конструкторы по умолчанию базового типа

CA2133

Делегаты должны привязываться к методам с соответствующей прозрачностью

CA2134

Методы должны сохранять согласованную прозрачность при переопределении базовых методов

CA2137

Прозрачные методы должны содержать только поддающийся проверке IL

CA2138

Прозрачные методы не должны вызывать методы с атрибутом SuppressUnmanagedCodeSecurity

CA2140

Прозрачный код не должен ссылаться на элементы, критичные в плане безопасности

CA2141

Прозрачные методы не должны удовлетворять требования LinkDemand

CA2146

Типы должны быть настолько же критическими, как их базовые типы и интерфейсы.

CA2147

Прозрачные методы могут не использовать утверждения безопасности

CA2149

Прозрачные методы не должны вызывать машинный код

CA2200

Следует повторно вызывать исключение для сохранения сведений о стеке

CA2202

Не удаляйте объекты несколько раз

CA2207

Используйте встроенную инициализацию статических полей типов значений

CA2212

Не помечайте обслуживаемые компоненты атрибутом WebMethod

CA2213

Высвободите высвобождаемые поля

CA2214

Не вызывайте переопределяемые методы в конструкторах

CA2216

Высвобождаемые типы должны объявлять метод завершения

CA2220

Методы завершения должны вызывать метод завершения базового класса

CA2229

Реализуйте конструкторы сериализации

CA2231

Перегружать равенство операторов следует при перегрузке ValueType.Equals

CA2232

Отметьте точки входа Windows Forms меткой STAThread

CA2235

Пометьте все несериализуемые поля

CA2236

Вызовите методы базового класса для типов ISerializable

CA2237

Пометьте типы ISerializable атрибутом SerializableAttribute

CA2238

Правильно реализуйте методы сериализации

CA2240

Правильно реализуйте ISerializable

CA2241

Предоставьте правильные аргументы методам форматирования

CA2242

Правильно выполните проверку NaN

CA1008

Перечисляемые типы должны иметь нулевое значение

CA1013

Перегружайте оператор равенства при перегрузке операторов сложения и вычитания

CA1303

Не передавайте литералы в виде локализованных параметров

CA1308

Нормализуйте строки в верхнем регистре

CA1806

Не игнорируйте результаты метода

CA1816

Вызов GC.SuppressFinalize должен осуществляться правильно

CA1819

Свойства не должны возвращать массивы

CA1820

Проверьте наличие пустых строк путем проверки длины строки

CA1903

Используйте API-интерфейс только из целевой исполняющей среды

CA2004

Удалите вызовы GC.KeepAlive

CA2006

Используйте SafeHandle для инкапсуляции машинных ресурсов

CA2102

Перехватите исключения, не являющиеся CLSCompliant, с помощью общих обработчиков

CA2104

Не объявляйте изменяемые ссылочные типы, доступные только для чтения

CA2105

Поля массивов не должны быть доступны только для чтения

CA2106

Обеспечьте безопасность утверждений

CA2115

Вызовите GC.KeepAlive при использовании собственных ресурсов

CA2119

Запечатайте методы, соответствующие закрытым интерфейсам

CA2120

Обеспечьте безопасность конструкторов сериализации

CA2121

Статические конструкторы должны быть закрытыми

CA2130

Константы критической безопасности должны быть прозрачными

CA2205

Используйте управляемые эквиваленты API Win32

CA2215

Методы Dispose должны вызывать такие же методы базового класса

CA2221

Методы завершения должны быть защищены

CA2222

Не уменьшайте видимость унаследованных членов

CA2223

Члены должны различаться не только возвращаемым типом

CA2224

Переопределите равенство при перегрузке оператора равенства

CA2226

Перегрузки операторов должны быть симметричны

CA2227

Свойства коллекции должны иметь параметр "только для чтения"

CA2239

Предоставьте методы десериализации для необязательных полей

CA1032

Реализуйте стандартные конструкторы исключения

CA1054

Параметры URI не должны быть строками

CA1055

Возвращаемые значения URI не должны быть строками

CA1056

Свойства URI не должны быть строками

CA1057

Перегрузки строковых параметров URI вызывают перегрузки System.Uri

CA1402

Не используйте перегрузки в интерфейсах, видимых в COM

CA1406

Не используйте аргументы Int64 для клиентов Visual Basic 6

CA1407

Не используйте статические члены в видимых COM типах

CA1408

Не используйте AutoDual ClassInterfaceType

CA1409

Видимые COM-типы должны быть создаваемыми

CA1411

Методы регистрации для COM-клиента не должны быть видимыми

CA1412

Пометьте интерфейсы ComSource как IDispatch

CA1413

Избегайте использования не открытых полей в видимых типах значений COM

CA1414

Пометьте логические аргументы P/Invoke с помощью атрибута MarshalAs

CA1600

Не используйте приоритет процессов в состоянии ожидания

CA1601

Не используйте таймеры, препятствующие изменению состояния электропитания

CA1824

Пометьте сборки атрибутом NeutralResourcesLanguageAttribute

CA2001

Избегайте вызовов проблемных методов

CA2003

Не следует обрабатывать нити как потоки

CA2135

Сборки уровня 2 не должны содержать требования LinkDemand

CA2136

Элементы не должны иметь конфликтующие пометки прозрачности

CA2139

Прозрачные методы могут не использовать атрибут HandleProcessCorruptingExceptions

CA2142

Прозрачный код не должен быть защищен с помощью требований LinkDemand

CA2143

Прозрачные методы не должны использовать требования безопасности

CA2144

Прозрачный код не должен загружать сборки из массивов байтов

CA2145

Прозрачные методы не должны быть снабжены атрибутом SuppressUnmanagedCodeSecurityAttribute

CA2204

Литералы должны иметь правильное написание

CA2211

Поля, не являющиеся константами, не должны быть видимыми

CA2217

Не помечайте перечисления атрибутом FlagsAttribute

CA2218

Переопределите GetHashCode при переопределении Equals

CA2219

Не создавайте исключения в предложениях исключений

CA2225

Для перезагрузок оператора существуют дополнения с именами

CA2228

Не поставляйте невыпущенные форматы ресурсов

CA2230

Используйте params для переменного количества аргументов

CA2233

В операциях не должно быть переполнений

CA2234

Передавайте объекты System.Uri вместо строк

CA2243

Синтаксический анализ строковых литералов атрибута должен осуществляться правильно