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


Набор правил "Базовые нормы и правила разработки" для управляемого кода

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

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

В следующей таблице описываются все правила набора правил "Базовые правила и рекомендации по разработке корпорации Майкрософт".

Правило

Описание

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

CA1000

Не объявляйте статические члены в универсальных типах

CA1002

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

CA1003

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

CA1004

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

CA1005

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

CA1006

Не создавайте вложенных универсальных типов в сигнатурах членов

CA1007

Используйте универсальные объекты, если это уместно

CA1008

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

CA1010

Коллекции должны реализовывать универсальный интерфейс

CA1011

Попробуйте передать базовые типы в качестве параметров

CA1012

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

CA1013

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

CA1014

Помечайте сборки атрибутом CLSCompliantAttribute

CA1017

Помечайте сборки атрибутом ComVisibleAttribute

CA1018

Помечайте атрибуты с помощью AttributeUsageAttribute

CA1019

Определите методы доступа для аргументов атрибута

CA1023

Индексы не должны быть многомерными

CA1024

Используйте свойства, если это уместно

CA1025

Замените повторяющиеся аргументы массивом параметров

CA1026

Не следует использовать параметры по умолчанию

CA1027

Следует помечать перечисления атрибутом FlagsAttribute

CA1028

Хранилище перечисляемых типов должно относиться к типу Int32

CA1030

Используйте события, если это уместно

CA1031

Не перехватывайте типы общих исключений

CA1032

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

CA1034

Вложенные типы не должны быть видимыми

CA1035

В составе реализаций ICollection есть строго типизированные элементы

CA1036

Переопределите методы в сопоставимых типах

CA1038

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

CA1039

Списки обладают строгой типизацией

CA1041

Укажите сообщение ObsoleteAttribute

CA1043

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

CA1044

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

CA1046

Не перегружайте оператор равенства для ссылочных типов

CA1047

Не объявляйте защищенные члены в запечатанных типах

CA1048

Не объявляйте виртуальные члены в запечатанных типах

CA1050

Объявляйте типы в пространствах имен

CA1051

Не объявляйте видимые поля экземпляров

CA1052

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

CA1053

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

CA1054

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

CA1055

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

CA1056

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

CA1057

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

CA1058

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

CA1059

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

CA1064

Исключения должны быть общими

CA1500

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

CA1502

Избегайте чрезмерной сложности

CA1708

Идентификаторы должны отличаться не только регистром

CA1716

Идентификаторы не должны совпадать с ключевыми словами

CA1801

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

CA1804

Удалите неиспользуемые локальные переменные

CA1809

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

CA1810

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

CA1811

Избегайте невызываемый закрытый код

CA1812

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

CA1813

Избегайте распечатанных атрибутов

CA1814

Используйте ступенчатые массивы вместо многомерных

CA1815

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

CA1819

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

CA1820

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

CA1822

Помечайте члены как статические

CA1823

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

CA2201

Не вызывайте зарезервированные типы исключений

CA2205

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

CA2208

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

CA2211

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

CA2217

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

CA2219

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

CA2221

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

CA2222

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

CA2223

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

CA2224

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

CA2225

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

CA2226

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

CA2227

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

CA2230

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

CA2234

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

CA2239

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