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

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

Набор правил расширенной правильности Майкрософт содержит правила, которые находятся в наборе правил базовой правильности , которые содержат правила, которые находятся в наборе правил управляемых рекомендуемых правил .

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

Правило Description
CA1001 Типы, которым принадлежат освобождаемые поля, должны быть освобождаемыми
CA1009 Правильно объявляйте обработчики событий
CA1016 Пометьте сборки с помощью AssemblyVersionAttribute
CA1033 Методы интерфейса должны быть доступны для вызова дочерними типами
CA1049 Типы, которым принадлежат собственные ресурсы, должны быть освобождаемыми
CA1060 Переместите методы P/Invoke в класс NativeMethods
CA1061 Не скрывайте методы базовых классов
CA1063 Правильно реализуйте IDisposable
CA1065 Не вызывайте исключения в непредвиденных местах
CA1301 Избегайте повторяющихся акселераторов
CA1400 Для методов P/Invoke должны существовать точки входа
CA1401 Методы P/Invoke не должны быть видимыми
CA1403 Типы с автомакетом не должны быть видимыми для 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 Прозрачные методы должны содержать только поддающийся проверке промежуточный язык
CA2138 Прозрачные методы не должны вызывать методы с атрибутом SuppressUnmanagedCodeSecurity
CA2140 Прозрачный код не должен ссылаться на критические для безопасности элементы
CA2141 Прозрачные методы не должны удовлетворять LinkDemands
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 Используйте управляемые эквиваленты Win32 API
CA2215 Метод Dispose должен вызывать базовый класс Dispose
CA2221 Методы завершения должны быть защищенными
CA2222 Не уменьшайте видимость наследуемого члена
CA2223 Члены должны различаться не только возвращаемым типом
CA2224 Переопределяйте Equals при перегрузке оператора равенства
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 не должны содержать LinkDemands
CA2136 Члены не должны иметь противоречащие заметки прозрачности
CA2139 Прозрачные методы могут не использовать атрибут HandleProcessCorruptingExceptions
CA2142 Прозрачный код не должен быть защищен проверками LinkDemands
CA2143 Прозрачные методы не должны использовать требования безопасности
CA2144 Прозрачный код не должен выполнять загрузку сборок из массивов байтов
CA2145 Прозрачные методы не должны быть отмечены атрибутом SuppressUnmanagedCodeSecurityAttribute
CA2204 Литералы должны иметь правильное правописание
CA2211 Поля, не являющиеся константами, не должны быть видимыми
CA2217 Не помечайте перечисляемые типы с помощью FlagsAttribute
CA2218 Переопределяйте GetHashCode при переопределении Equals
CA2219 В предложениях с исключениями не должны порождаться исключения
CA2225 Для перегрузок операторов существуют варианты с именами
CA2228 Не поставляйте предварительные форматы ресурсов
CA2230 Используйте параметры для аргументов переменной
CA2233 В операциях не должно быть переполнений
CA2234 Передавайте объекты System.Uri вместо строк
CA2243 Синтаксический разбор строковых литералов должен осуществляться правильно