Набор правил "Расширенные правила определения правильности" для управляемого кодаExtended Correctness Rules rule set for managed code

Набор правил "Расширенные правила корректности Microsoft" позволяет развернуть логику и ошибки использования платформы, о которых сообщает анализ кода.The Microsoft Extended Correctness Rules rule set maximizes the logic and framework usage errors that are reported by code analysis. Особое внимание уделяется конкретным сценариям, например COM-взаимодействию и мобильным приложениям.Extra emphasis is placed on specific scenarios such as COM interoperability and mobile applications. Следует рассмотреть возможность включения этого набора правил, если один из этих сценариев применяется к проекту или для поиска дополнительных проблем в проекте.You should consider including this rule set if one of these scenarios applies to your project or to find additional problems in your project.

Набор правил "Расширенные правила корректности Microsoft" включает правила, которые находятся в наборе правил " основные правила для правил правильности ", который содержит правила, указанные в наборе правил " управляемые Рекомендуемые правила ".The Microsoft Extended Correctness Rules rule set includes the rules that are in the Basic Correctness Rules rule set, which contains the rules that are in the Managed Recommended Rules rule set.

В следующей таблице описаны все правила в наборе правил "Расширенные правила исправления Microsoft".The following table describes all of the rules in the Microsoft Extended Correctness Rules rule set.

ПравилоRule ОписаниеDescription
CA1001CA1001 Типы, которым принадлежат освобождаемые поля, должны быть освобождаемымиTypes that own disposable fields should be disposable
CA1009CA1009 Правильно объявляйте обработчики событийDeclare event handlers correctly
CA1016CA1016 Пометьте сборки с помощью AssemblyVersionAttributeMark assemblies with AssemblyVersionAttribute
CA1033CA1033 Методы интерфейса должны быть доступны для вызова дочерними типамиInterface methods should be callable by child types
CA1049CA1049 Типы, которым принадлежат собственные ресурсы, должны быть освобождаемымиTypes that own native resources should be disposable
CA1060CA1060 Переместите методы P/Invoke в класс NativeMethodsMove P/Invokes to NativeMethods class
CA1061CA1061 Не скрывайте методы базовых классовDo not hide base class methods
CA1063CA1063 Правильно реализуйте IDisposableImplement IDisposable correctly
CA1065CA1065 Не вызывайте исключения в непредвиденных местахDo not raise exceptions in unexpected locations
CA1301CA1301 Избегайте повторяющихся акселераторовAvoid duplicate accelerators
CA1400CA1400 Для методов P/Invoke должны существовать точки входаP/Invoke entry points should exist
CA1401CA1401 Методы P/Invoke не должны быть видимымиP/Invokes should not be visible
CA1403CA1403 Типы с автомакетом не должны быть видимыми для COMAuto layout types should not be COM visible
CA1404CA1404 Вызывайте GetLastError сразу после P/InvokeCall GetLastError immediately after P/Invoke
CA1405CA1405 Базовые типы, относящиеся к типу, видимому для COM, должны быть видимыми для COMCOM visible type base types should be COM visible
CA1410CA1410 Методы регистрации COM должны быть согласованнымиCOM registration methods should be matched
CA1415CA1415 Правильно объявляйте методы P/InvokeDeclare P/Invokes correctly
CA1821CA1821 Удалите пустые методы завершенияRemove empty finalizers
CA1900CA1900 Поля типов значений должны быть переносимымиValue type fields should be portable
CA1901CA1901 Объявления P/Invoke должны быть переносимымиP/Invoke declarations should be portable
CA2002CA2002 Не блокируйте объекты с ненадежными удостоверениямиDo not lock on objects with weak identity
CA2100CA2100 Проверьте запросы SQL на наличие уязвимостей системы безопасностиReview SQL queries for security vulnerabilities
CA2101CA2101 Укажите тип маршалинга для строковых аргументов P/InvokeSpecify marshaling for P/Invoke string arguments
CA2108CA2108 Проверьте объявляемые параметры безопасности типов значенийReview declarative security on value types
CA2111CA2111 Указатели не должны быть видимымиPointers should not be visible
CA2112CA2112 Защищенные типы не должны предоставлять поляSecured types should not expose fields
CA2114CA2114 Безопасность метода должна быть надмножеством типаMethod security should be a superset of type
CA2116CA2116 APTCA-методы должны вызывать только APTCA-методыAPTCA methods should only call APTCA methods
CA2117CA2117 APTCA-типы должны расширять только базовые APTCA-типыAPTCA types should only extend APTCA base types
CA2122CA2122 Не используйте косвенное представление методов с требованиями ссылкиDo not indirectly expose methods with link demands
CA2123CA2123 Переопределяющие требования ссылки должны быть идентичны базовымOverride link demands should be identical to base
CA2124CA2124 Ограничьте уязвимые предложения finally во внешних блоках tryWrap vulnerable finally clauses in outer try
CA2126CA2126 Для требований ссылок на тип необходимы требования наследованияType link demands require inheritance demands
CA2131CA2131 Критические для безопасности типы не могут участвовать в эквивалентности типовSecurity critical types may not participate in type equivalence
CA2132CA2132 Конструкторы по умолчанию должны быть по меньшей мере такими же критическими, как конструкторы по умолчанию базового типаDefault constructors must be at least as critical as base type default constructors
CA2133CA2133 Делегаты должны быть привязаны к методам с соответствующей прозрачностьюDelegates must bind to methods with consistent transparency
CA2134CA2134 Методы должны сохранять одинаковую прозрачность при переопределении базовых методовMethods must keep consistent transparency when overriding base methods
CA2137CA2137 Прозрачные методы должны содержать только поддающийся проверке промежуточный языкTransparent methods must contain only verifiable IL
CA2138CA2138 Прозрачные методы не должны вызывать методы с атрибутом SuppressUnmanagedCodeSecurityTransparent methods must not call methods with the SuppressUnmanagedCodeSecurity attribute
CA2140CA2140 Прозрачный код не должен ссылаться на критические для безопасности элементыTransparent code must not reference security critical items
CA2141CA2141 Прозрачные методы не должны соответствовать требованиям LinkDemandTransparent methods must not satisfy LinkDemands
CA2146CA2146 Типы должны быть по крайней мере настолько же критическими, как их базовые типы и интерфейсыTypes must be at least as critical as their base types and interfaces
CA2147CA2147 Прозрачные методы могут не использовать утверждения безопасностиTransparent methods may not use security asserts
CA2149CA2149 Прозрачные методы не должны вызывать машинный кодTransparent methods must not call into native code
CA2200CA2200 Повторно порождайте исключения для сохранения сведений стекаRethrow to preserve stack details
CA2202CA2202 Не ликвидируйте объекты несколько разDo not dispose objects multiple times
CA2207CA2207 Используйте встроенную инициализацию статических полей типов значенийInitialize value type static fields inline
CA2212CA2212 Не помечайте обслуживаемые компоненты с помощью WebMethodDo not mark serviced components with WebMethod
CA2213CA2213 Следует высвобождать высвобождаемые поляDisposable fields should be disposed
CA2214CA2214 Не вызывайте переопределяемые методы в конструкторахDo not call overridable methods in constructors
CA2216CA2216 Высвобождаемые типы должны объявлять методы завершенияDisposable types should declare finalizer
CA2220CA2220 Методы завершения должны вызывать метод завершения базового классаFinalizers should call base class finalizer
CA2229CA2229 Реализуйте конструкторы сериализацииImplement serialization constructors
CA2231CA2231 Перегрузите оператор равенства на переопределяющем типе ValueType.EqualsOverload operator equals on overriding ValueType.Equals
CA2232CA2232 Отметьте точки входа Windows Forms меткой STAThreadMark Windows Forms entry points with STAThread
CA2235CA2235 Пометьте все несериализуемые поляMark all non-serializable fields
CA2236CA2236 Вызывайте методы базового класса для типов ISerializableCall base class methods on ISerializable types
CA2237CA2237 Пометьте типы ISerializable атрибутом SerializableAttributeMark ISerializable types with SerializableAttribute
CA2238CA2238 Правильно реализуйте методы сериализацииImplement serialization methods correctly
CA2240CA2240 Правильно реализуйте ISerializableImplement ISerializable correctly
CA2241CA2241 Задайте правильные аргументы для методов форматированияProvide correct arguments to formatting methods
CA2242CA2242 Правильно выполняйте проверку NaNTest for NaN correctly
CA1008CA1008 Перечисляемые типы должны иметь нулевое значениеEnums should have zero value
CA1013CA1013 Перегружайте оператор равенства при перегрузке операторов сложения и вычитанияOverload operator equals on overloading add and subtract
CA1303CA1303 Не передавайте литералы в качестве локализованных параметровDo not pass literals as localized parameters
CA1308CA1308 Нормализуйте строки в верхний регистрNormalize strings to uppercase
CA1806CA1806 Не игнорируйте результаты методаDo not ignore method results
CA1816CA1816 Вызов GC.SuppressFinalize должен осуществляться правильноCall GC.SuppressFinalize correctly
CA1819CA1819 Свойства не должны возвращать массивыProperties should not return arrays
CA1820CA1820 Проверяйте наличие пустых строк, используя длину строкиTest for empty strings using string length
CA1903CA1903 Используйте API только из целевой рабочей средыUse only API from targeted framework
CA2004CA2004 Удалите вызовы GC.KeepAliveRemove calls to GC.KeepAlive
CA2006CA2006 Используйте SafeHandle для инкапсуляции собственных ресурсовUse SafeHandle to encapsulate native resources
CA2102CA2102 Перехватывайте исключения, не являющиеся CLSCompliant, с помощью общих обработчиковCatch non-CLSCompliant exceptions in general handlers
CA2104CA2104 Не объявляйте изменяющиеся ссылочные типы только для чтенияDo not declare read only mutable reference types
CA2105CA2105 Поля массивов не должны быть доступны только для чтенияArray fields should not be read only
CA2106CA2106 Обеспечьте безопасность утвержденийSecure asserts
CA2115CA2115 Вызывайте GC.KeepAlive при использовании собственных ресурсовCall GC.KeepAlive when using native resources
CA2119CA2119 Запечатайте методы, соответствующие частным интерфейсамSeal methods that satisfy private interfaces
CA2120CA2120 Обеспечьте безопасность конструкторов сериализацииSecure serialization constructors
CA2121CA2121 Статические конструкторы должны быть частнымиStatic constructors should be private
CA2130CA2130 Важные константы безопасности должны быть прозрачнымиSecurity critical constants should be transparent
CA2205CA2205 Используйте управляемые эквиваленты Win32 APIUse managed equivalents of Win32 API
CA2215CA2215 Метод Dispose должен вызывать базовый класс DisposeDispose methods should call base class dispose
CA2221CA2221 Методы завершения должны быть защищеннымиFinalizers should be protected
CA2222CA2222 Не уменьшайте видимость наследуемого членаDo not decrease inherited member visibility
CA2223CA2223 Члены должны различаться не только возвращаемым типомMembers should differ by more than return type
CA2224CA2224 Переопределяйте Equals при перегрузке оператора равенстваOverride equals on overloading operator equals
CA2226CA2226 Перегрузки операторов должны быть симметричнымиOperators should have symmetrical overloads
CA2227CA2227 Свойства, возвращающие коллекции, должны быть доступными только для чтенияCollection properties should be read only
CA2239CA2239 Обеспечьте наличие методов десериализации в необязательных поляхProvide deserialization methods for optional fields
CA1032CA1032 Реализуйте стандартные конструкторы исключенийImplement standard exception constructors
CA1054CA1054 Параметры URI не должны быть строкамиURI parameters should not be strings
CA1055CA1055 Возвращаемые значения URI не должны быть строкамиURI return values should not be strings
CA1056CA1056 Свойства URI не должны быть строкамиURI properties should not be strings
CA1057CA1057 Перегрузки строковых параметров URI вызывают перегрузки System.UriString URI overloads call System.Uri overloads
CA1402CA1402 Избегайте перегрузок в видимых COM-интерфейсахAvoid overloads in COM visible interfaces
CA1406CA1406 Не используйте аргументы Int64 для клиентов Visual Basic 6Avoid Int64 arguments for Visual Basic 6 clients
CA1407CA1407 Не используйте статические члены в типах, видимых для COMAvoid static members in COM visible types
CA1408CA1408 Не используйте тип AutoDual ClassInterfaceTypeDo not use AutoDual ClassInterfaceType
CA1409CA1409 Видимые для COM типы должны быть создаваемымиCom visible types should be creatable
CA1411CA1411 Методы регистрации COM не должны быть видимымиCOM registration methods should not be visible
CA1412CA1412 Пометьте интерфейсы ComSource как IDispatchMark ComSource Interfaces as IDispatch
CA1413CA1413 Не используйте неоткрытые поля в типах значений, видимых для COMAvoid non-public fields in COM visible value types
CA1414CA1414 Пометьте логические аргументы P/Invoke с помощью MarshalAsMark boolean P/Invoke arguments with MarshalAs
CA1600CA1600 Не используйте приоритет процесса простояDo not use idle process priority
CA1601CA1601 Не используйте таймеры, препятствующие изменению состояния электропитанияDo not use timers that prevent power state changes
CA1824CA1824 Помечайте сборки с помощью NeutralResourcesLanguageAttributeMark assemblies with NeutralResourcesLanguageAttribute
CA2001CA2001 Избегайте вызова проблемных методовAvoid calling problematic methods
CA2003CA2003 Не рассматривайте волокна в качестве потоковDo not treat fibers as threads
CA2135CA2135 Сборки уровня 2 не должны содержать LinkDemandsLevel 2 assemblies should not contain LinkDemands
CA2136CA2136 Члены не должны иметь противоречащие заметки прозрачностиMembers should not have conflicting transparency annotations
CA2139CA2139 Прозрачные методы могут не использовать атрибут HandleProcessCorruptingExceptionsTransparent methods may not use the HandleProcessCorruptingExceptions attribute
CA2142CA2142 Прозрачный код не должен быть защищен проверками LinkDemandsTransparent code should not be protected with LinkDemands
CA2143CA2143 Прозрачные методы не должны использовать требования безопасностиTransparent methods should not use security demands
CA2144CA2144 Прозрачный код не должен выполнять загрузку сборок из массивов байтовTransparent code should not load assemblies from byte arrays
CA2145CA2145 Прозрачные методы не должны быть отмечены атрибутом SuppressUnmanagedCodeSecurityAttributeTransparent methods should not be decorated with the SuppressUnmanagedCodeSecurityAttribute
CA2204CA2204 Литералы должны иметь правильное правописаниеLiterals should be spelled correctly
CA2211CA2211 Поля, не являющиеся константами, не должны быть видимымиNon-constant fields should not be visible
CA2217CA2217 Не помечайте перечисляемые типы с помощью FlagsAttributeDo not mark enums with FlagsAttribute
CA2218CA2218 Переопределяйте GetHashCode при переопределении EqualsOverride GetHashCode on overriding Equals
CA2219CA2219 В предложениях с исключениями не должны порождаться исключенияDo not raise exceptions in exception clauses
CA2225CA2225 Для перегрузок операторов существуют варианты с именамиOperator overloads have named alternates
CA2228CA2228 Не поставляйте предварительные форматы ресурсовDo not ship unreleased resource formats
CA2230CA2230 Используйте параметры для аргументов переменнойUse params for variable arguments
CA2233CA2233 В операциях не должно быть переполненийOperations should not overflow
CA2234CA2234 Передавайте объекты System.Uri вместо строкPass System.Uri objects instead of strings
CA2243CA2243 Синтаксический разбор строковых литералов должен осуществляться правильноAttribute string literals should parse correctly