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


Предупреждения при анализе управляемого кода по идентификатору CheckId

В следующей таблице перечислены предупреждения анализа управляемого кода по идентификатору CheckId предупреждения.

Предупреждения

CheckId

Предупреждение

Описание

CA1000

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

При вызове статического элемента универсального типа нужно указать аргумент этого типа. При вызове универсального экземпляра элемента, не поддерживающего вывод типа, для элемента нужно указать аргумент типа. В этих двух случаях синтаксис для определения аргумента типа различен, и его можно легко спутать.

CA1001

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

В классе объявляется и реализуется поле экземпляра, которое принадлежит типу System.IDisposable, однако класс не реализует интерфейс IDisposable. Класс, в котором объявляется поле IDisposable, неявно владеет неуправляемым ресурсом и должен реализовывать интерфейс IDisposable.

CA1002

CA1002: не следует раскрывать универсальные списки

System.Collections.Generic.List<(Of <(T>)>) — это универсальная коллекция, предназначенная не для наследования, а для повышения производительности. Поэтому виртуальные элементы в списке отсутствуют. Вместо этого для наследования следует предоставить универсальную коллекцию.

CA1003

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

Тип содержит делегат, возвращающий значение void, сигнатура которого содержит два параметра (первый — объект, а второй — тип, который может быть назначен EventArgs), а включающая сборка предназначена для платформы Microsoft .NET Framework 2.0.

CA1004

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

Вывод – это то, как аргумент типа универсального метода определяется по типу аргумента, переданного методу, а не по явному указанию аргумента типа. Чтобы задействовать вывод, сигнатура параметра универсального метода должна включать параметр, тип которого совпадает с параметром типа для метода. В этом случае аргумент типа указывать не обязательно. При использовании вывода для всех параметров типа синтаксис вызова универсальных и неуниверсальных методов экземпляра является одинаковым; он повышает удобство использования универсальных методов.

CA1005

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

Чем больше параметров типов содержит универсальный тип, тем сложнее знать и запоминать, что представляет каждый параметр типа. Обычно ситуация очевидна при использовании одного параметра типа, как в List<T>, и в ряде случаев при двух параметрах типов, как в Dictionary<TKey, TValue>. Если же используется более двух параметров типов, многие пользователи начинают испытывать большие трудности.

CA1006

CA1006: не вкладывайте универсальные типы в сигнатуры членов

Аргумент вложенного типа также является аргументом универсального типа. Чтобы вызвать член, сигнатура которого содержит аргумент вложенного типа, пользователь должен создать экземпляр одного универсального типа и передать этот тип конструктору второго универсального типа. Это приводит к усложнению процедуры и синтаксиса, чего следует избегать.

CA1007

CA1007: используйте универсальные методы, если это уместно

Видимый извне метод содержит ссылочный параметр типа System.Object. Использование универсального метода позволяет передавать в метод все типы без предварительного приведения к типу ссылочного параметра при условии выполнения некоторых ограничений.

CA1008

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

Значение по умолчанию неинициализированного перечисления, как и других типов значений, равно нулю. Перечисление без флагов в качестве атрибутов должно определять член с использованием нулевого значения так, чтобы значение по умолчанию было допустимым значением перечисления. Если перечисление с примененным атрибутом FlagsAttribute определяет член с нулевым значением, для него должно быть задано имя None, свидетельствующее о том, что в перечислении не были заданы значения.

CA1009

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

Методы обработчиков событий принимают два параметра. Первый параметр принадлежит типу System.Object и называется "sender". Это объект, вызвавший событие. Второй параметр принадлежит типу System.EventArgs и называется "e". Это данные, связанные с событием. Методы обработки событий не должны возвращать значение; в языке программирования C# оно обозначается возвращаемым типом void.

CA1010

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

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

CA1011

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

Если в объявлении метода в качестве параметра указан базовый тип, любой тип, производный от базового, можно передать методу в качестве соответствующего аргумента. Если дополнительные функции, предоставляемые производным типом параметра, не требуются, то использование базового типа позволит более широко применять данный метод.

CA1012

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

Конструкторы абстрактных типов могут быть вызваны только производными типами. Открытые конструкторы создают экземпляры типа. Невозможно создавать экземпляры абстрактного типа; абстрактный тип с открытым конструктором является недопустимым.

CA1013

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

Открытый или защищенный тип реализует операторы сложения или вычитания без реализации оператора равенства.

CA1014

CA1014: помечайте сборки атрибутом CLSCompliantAttribute

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

CA1016

CA1016: помечать сборки атрибутом AssemblyVersionAttribute

.NET Framework использует номер версии для уникального обозначения сборки и для привязки к типам в сборках со строгими именами. Номер версии используется наряду с политикой версий и издателя. По умолчанию приложения выполняются только с версией сборки, которая использовалась для их построения.

CA1017

CA1017: помечайте сборки атрибутом ComVisibleAttribute

Атрибут ComVisibleAttribute определяет порядок обращения клиентов COM к управляемому коду. Для правильной разработки сборки должны явным образом указывать видимость COM. Можно задать видимость COM для всей сборки, а затем переопределить ее для отдельных типов и элементов типов. Если атрибут отсутствует, содержимое сборки будет видимым клиентам COM.

CA1018

CA1018: помечайте атрибуты как AttributeUsageAttribute

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

CA1019

CA1019: необходимо определять методы доступа для аргументов атрибутов

Атрибуты могут определять обязательные аргументы, которые должны быть указаны при применении атрибута к целевому объекту. Они также известны как позиционные аргументы, поскольку предоставляются для конструкторов атрибутов в качестве позиционных параметров. Для каждого обязательного аргумента атрибут должен предоставлять соответствующее свойство, доступное только для чтения, чтобы извлечь значение аргумента во время выполнения. Кроме того, атрибуты могут определять дополнительные параметры, известные как именованные аргументы. Эти аргументы предоставляются для конструкторов атрибутов по имени и должны иметь соответствующее свойство чтения/записи.

CA1020

CA1020: не используйте пространства имен с несколькими типами

Убедитесь, что каждое из используемых пространств имен имеет логическую организацию и существует веская причина для помещения типов в сильно разреженное пространство имен.

CA1021

CA1021: не используйте параметры out

Для реализации передачи типов по ссылке (с помощью ключевого слова out или ref) от разработчика требуется опыт работы с указателями, понимание отличия между типами значения и ссылочными типами и умение работать с методами с несколькими возвращаемыми значениями. Кроме того, далеко не все понимают разницу между параметрами out и ref.

CA1023

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

Для индексаторов (индексированных свойств) должен использоваться один индекс. Многомерные индексаторы могут крайне отрицательно сказаться на удобстве работы с библиотекой.

CA1024

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

Имя открытого или защищенного метода начинается с Get, он не принимает параметры и возвращает значение, не являющееся массивом. Возможно, этот метод лучше преобразовать в свойство.

CA1025

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

Если точное число аргументов неизвестно и эти аргументы принадлежат одному типу или могут быть переданы как аргументы одного типа, используйте вместо повторяющихся аргументов массив параметров.

CA1026

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

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

CA1027

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

Перечисление является типом значения, которое определяет набор связанных именованных констант. Атрибут FlagsAttribute применяется к перечислению, когда его именованные константы могут быть объединены осмысленным образом.

CA1028

CA1028: хранилище перечислений должно иметь тип Int32

Перечисление является типом значения, которое определяет набор связанных именованных констант. По умолчанию для хранения значения константы используется тип данных System.Int32. Этот базовый тип можно изменить, но это не требуется и в большинстве случаев не рекомендуется.

CA1030

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

Данное правило отслеживает методы с именами, которые, как правило, используются для событий. Если метод вызывается в ответ на четко определенное изменение состояния, то этот вызов должен осуществляться с помощью обработчика событий. Объекты, вызывающие методы, должны создавать события, а не вызывать методы напрямую.

CA1031

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

Общие исключения не должны перехватываться. Нужно перехватить исключение более конкретного характера или повторно выдать общее исключение в последнем операторе блока catch.

CA1032

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

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

CA1033

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

Незапечатанный тип, доступный для внешнего кода, предоставляет явную реализацию метода открытого интерфейса и не предоставляет доступный для внешнего кода альтернативный метод с тем же именем.

CA1034

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

Вложенный тип — это тип, объявленный внутри области другого типа. Вложенные типы удобно использовать для инкапсуляции закрытых сведений о реализациях содержащего их типа. В силу этого вложенные типы не должны быть видимыми для внешнего кода.

CA1035

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

Это правило требует, чтобы реализации ICollection предоставляли строго типизированные элементы, поскольку тогда пользователям не придется приводить аргументы к типу Object при использовании функциональных возможностей интерфейса. В этом правиле предполагается, что тип, реализующий интерфейс ICollection, делает это для управления коллекцией экземпляров типа, более строгого, чем Object.

CA1036

CA1036: переопределяйте методы в сравнимых типах

Открытый или защищенный тип реализует интерфейс System.IComparable. Он не переопределяет метод Object.Equals и не перегружает языковой оператор равенства, неравенства, "больше" или "меньше".

CA1038

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

Это правило требует, чтобы реализации IEnumerator предоставляли строго типизированную версию свойства Current, поскольку тогда пользователям не придется приводить возвращаемое значение к строгому типу при использовании функциональных возможностей интерфейса.

CA1039

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

Это правило требует, чтобы реализации IList предоставляли строго типизированные элементы, поскольку тогда пользователям не придется приводить аргументы к типу System.Object при использовании функциональных возможностей интерфейса.

CA1040

CA1040: избегайте пустых интерфейсов

Интерфейсы определяют члены, предоставляющие поведение или соглашение об использовании. Функциональность, описанная интерфейсом, может быть использована любым типом вне зависимости от расположения типа в иерархии интерфейса. Тип реализует интерфейс путем предоставления реализаций для членов интерфейса. Пустой интерфейс не определяет никаких элементов, поэтому он не определяет контракт, который можно реализовать.

CA1041

CA1041: укажите сообщение ObsoleteAttribute

Тип или элемент помечен атрибутом System.ObsoleteAttribute, для которого не указано свойство ObsoleteAttribute.Message. При компиляции типа или элемента, помеченного атрибутом ObsoleteAttribute, отображается текст свойства Message этого атрибута. Это предоставляет пользователю сведения об устаревшем типе или члене.

CA1043

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

Индексаторы (индексированные свойства) должны использовать для индекса целочисленные или строковые типы. Эти типы обычно используются для индексации структур данных и повышения удобства использования библиотеки. Тип Object следует использовать только в том случае, если во время разработки невозможно указать определенный целочисленный или строковый тип.

CA1044

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

Несмотря на то, что допустимо, а часто и необходимо иметь свойство, доступное только на чтение, рекомендации по разработке запрещают использование свойств, доступных только на запись. Это связано с тем, что если позволить пользователю задать значение, а затем запретить ему просматривать это значение, то таким образом не будет обеспечиваться какая-либо безопасность. Кроме того, при отсутствии доступа на чтение нельзя просмотреть состояние общих объектов, что снижает их полезность.

CA1045

CA1045: не передавайте типы по ссылке

Для реализации передачи типов по ссылке (с помощью ключевого слова out или ref) от разработчика требуется опыт работы с указателями, понимание отличия между типами значения и ссылочными типами и умение работать с методами с несколькими возвращаемыми значениями. Архитекторам, разрабатывающим библиотеки для широкого использования, не следует рассчитывать, что пользователи прекрасно разбираются в использовании параметров out и ref.

CA1046

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

Реализация оператора равенства по умолчанию почти всегда правильно работает для ссылочных типов. По умолчанию две ссылки равны, если они указывают на один объект.

CA1047

CA1047: не объявляйте защищенные элементы в запечатанных типах

Типы объявляют защищенный члены таким образом, чтобы наследующие типы могли получить доступ к члену или переопределить его. По определению наследовать запечатанные типы нельзя; это означает, что вызов защищенных методов для запечатанных типов невозможен.

CA1048

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

Типы объявляют методы как виртуальные, чтобы наследующие типы могли переопределять реализацию виртуального метода. По определению наследовать запечатанный тип нельзя. При этом виртуальный метод запечатанного типа теряет смысл.

CA1049

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

Типы, выделяющие неуправляемые ресурсы, должны реализовывать интерфейс IDisposable, чтобы вызывающие методы могли высвобождать эти ресурсы по требованию и сокращать время существования объектов, занимающих ресурсы.

CA1050

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

Типы объявляются в пространствах имен во избежание конфликтов имен и с целью упорядочения связанных типов в иерархии объектов.

CA1051

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

Поля главным образом следует использовать для данных реализации. Поля должны быть помечены как private или internal и должны быть представлены с помощью свойств.

CA1052

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

Открытый или защищенный тип содержит только статические элементы и не объявлен с модификатором sealed (справочник по C#) (NotInheritable). Тип, для которого нельзя создавать унаследованные типы, должен быть помечен модификатором sealed, чтобы его нельзя было использовать как базовый тип.

CA1053

CA1053: типы статических владельцев не должны иметь конструкторы

В открытом или вложенном открытом типе объявляются только статические элементы и имеется открытый или защищенный конструктор по умолчанию. Конструктор не нужен, поскольку при вызове статических членов не требуется экземпляр типа. Для обеспечения безопасности перегруженная строка должна вызывать перегрузку универсального кода ресурса (URI), используя строковый аргумент.

CA1054

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

Если метод принимает строковое представление универсального кода ресурса (URI), необходимо предоставить соответствующую перегрузку, принимающую экземпляр класса URI, который предоставляет эти услуги безопасным образом.

CA1055

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

В этом правиле предполагается, что метод возвращает универсальный код ресурса (URI). В строковых представлениях кода URI часто встречаются ошибки синтаксического анализа и кодирования, которые могут привести к уязвимостям системы безопасности. Класс System.Uri предоставляет аналогичные услуги более надежным и безопасным способом.

CA1056

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

В этом правиле предполагается, что свойство является универсальным кодом ресурса (URI). В строковых представлениях кода URI часто встречаются ошибки синтаксического анализа и кодирования, которые могут привести к уязвимостям системы безопасности. Класс System.Uri предоставляет аналогичные услуги более надежным и безопасным способом.

CA1057

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

Тип объявляет перегрузки метода, которые отличаются только заменой строкового параметра на параметр System.Uri. Эта перегрузка, которая принимает строковый параметр, не вызывает перегрузку, которая принимает параметр URI.

CA1058

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

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

CA1059

CA1059: члены не должны предоставлять определенные устойчивые типы

Устойчивый тип – это тип, который имеет полную реализацию и экземпляр которого можно создать. Чтобы иметь возможность широкого использования этого элемента, замените конкретный тип предложенным интерфейсом.

CA1060

CA1060: переместите P/Invokes в класс NativeMethods

Методы PInvoke, например методы, помеченные атрибутом System.Runtime.InteropServices.DllImportAttribute, или методы, определенные с помощью ключевого слова Declare в Visual Basic, обращаются к неуправляемому коду. Эти методы должны относиться к классу NativeMethods, SafeNativeMethods или UnsafeNativeMethods.

CA1061

CA1061: не следует скрывать методы базового класса

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

CA1062

CA1062: проверьте аргументы открытых методов

Все ссылочные аргументы, передаваемые в видимые для внешнего кода методы, должны проверяться на равенство значению NULL.

CA1063

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

Все типы IDisposable должны правильно реализовывать шаблон "Dispose".

CA1064

CA1064: исключения должны быть открытыми

Внутреннее исключение видно только внутри своей внутренней области. После выхода исключения за пределы внутренней области для перехвата исключения можно использовать только базовое исключение. Если внутренне исключение унаследовано от T:System.Exception, T:System.SystemException или T:System.ApplicationException, внешний код не имеет достаточных данных для обработки исключения.

CA1065

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

Метод вызывает исключение, хотя не должен этого делать.

CA1300

CA1300: укажите MessageBoxOptions

Чтобы окно сообщения для языков, в которых используется порядок чтения справа налево, отображалось правильно, методу Show следует передать члены RightAlign и RtlReading перечисления MessageBoxOptions.

CA1301

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

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

CA1302

CA1302: не следует жестко кодировать строки, зависящие от языка

Перечисление System.Environment.SpecialFolder содержит члены, ссылающиеся на специальные системные папки. Расположение этих папок может различаться в разных ОС, пользователь может менять расположение этих папок, их имена могут быть локализованы. Метод Environment.GetFolderPath возвращает связанные с перечислением Environment.SpecialFolder расположения в локализованной форме, подходящей для использования на работающем в данный момент компьютере.

CA1303

CA1303: не следует передавать литералы в виде локализованных параметров

Внешне видимый метод передает строковый литерал в виде параметра конструктору или методу в библиотеке классов .NET Framework, и эта строка должна быть локализуемой.

CA1304

CA1304: укажите CultureInfo

Метод или конструктор вызывает член, имеющий перегрузку, которая принимает параметр System.Globalization.CultureInfo, вместо того чтобы вызвать перегрузку, принимающую параметр CultureInfo. Если объект CultureInfo или System.IFormatProvider не предоставляется, значение по умолчанию, поставляемое перегруженным членом, может не оказать ожидаемого воздействия во всех языковых стандартах.

CA1305

CA1305: укажите IFormatProvider

Метод или конструктор вызывает один или несколько членов, имеющих перегрузки, которые принимают параметр System.IFormatProvider, вместо того чтобы вызвать перегрузку, принимающую параметр IFormatProvider. Если объект System.Globalization.CultureInfo или IFormatProvider не предоставляется, значение по умолчанию, поставляемое перегруженным членом, может не оказать ожидаемого воздействия во всех языковых стандартах.

CA1306

CA1306: указывайте языковой стандарт для типов данных

Язык и региональные параметры определяют представление элементов данных, таких как формат чисел, обозначение денежных единиц и порядок сортировки. При создании объектов DataTable или DataSet следует явным образом указывать языковой стандарт.

CA1307

CA1307: укажите StringComparison

В операции сравнения строк используется перегрузка метода, которая не задает параметр StringComparison.

CA1308

CA1308: строки следует нормализовать в верхнем регистре

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

CA1309

CA1309: используйте порядковый параметр StringComparison

Операция сравнения строк, не являющаяся лингвистической, не задает для параметра StringComparison ни значения Ordinal, ни значения OrdinalIgnoreCase. После явного задания для параметра значения StringComparison.Ordinal или StringComparison.OrdinalIgnoreCase код часто становится более надежным и правильным, кроме того, увеличивается скорость его выполнения.

CA1400

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

Открытый или защищенный метод, помеченный атрибутом System.Runtime.InteropServices.DllImportAttribute. Не удается найти неуправляемую библиотеку либо не удается сопоставить метод функции в библиотеке.

CA1401

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

Открытый или защищенный метод в открытом типе имеет атрибут System.Runtime.InteropServices.DllImportAttribute (также реализуется в Visual Basic с помощью ключевого слова Declare). Такие методы не следует делать видимыми.

CA1402

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

Когда перегруженные методы предоставляются клиентам COM, сохраняется имя только первой перегрузки метода. Последующие перегрузки переименовываются уникальным образом путем добавления к имени символа подчеркивания (_) и целого числа, соответствующего порядку объявления перегрузки.

CA1403

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

Видимый для модели COM тип значения помечается атрибутом System.Runtime.InteropServices.StructLayoutAttribute, имеющим значение LayoutKind.Auto. Макеты этих типов могут меняться в различных версиях платформы .NET Framework, что может привести к нарушению работы клиентов COM, которые ожидают определенного макета.

CA1404

CA1404: вызывайте GetLastError сразу после P/Invoke

Выполняется вызов метода Marshal.GetLastWin32Error или эквивалентной функции Win32 GetLastError, а непосредственно предшествующий вызов не является методом вызова операционной системы.

CA1405

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

Тип, видимый для модели COM, наследует от типа, который не является видимым для COM.

CA1406

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

COM-клиенты VisualBasic 6 не могут получать доступ к 64-разрядным целым числам.

CA1407

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

Модель COM не поддерживает статические методы.

CA1408

CA1408: не используйте AutoDual ClassInterfaceType

Типы, использующие сдвоенный интерфейс, позволяют клиентам выполнять привязку к определенному макету интерфейса. Все изменения в будущей версии макета типа и в базовых типах приведут к нарушению работы COM-клиентов, связанных с интерфейсом. По умолчанию, если атрибут ClassInterfaceAttribute не указан, используется только диспетчерский интерфейс.

CA1409

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

Ссылочный тип, который специально помечен как видимый для модели COM, содержит открытый параметризованный конструктор, но не содержит открытого конструктора по умолчанию (без параметров). COM-клиенты не могут создавать объекты типа, не содержащего открытый конструктор по умолчанию.

CA1410

CA1410: методы регистрации для COM-клиента должны быть соответствующими

Тип объявляет метод, помеченный атрибутом System.Runtime.InteropServices.ComRegisterFunctionAttribute, но не объявляет метод, помеченный атрибутом System.Runtime.InteropServices.ComUnregisterFunctionAttribute, или наоборот.

CA1411

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

Метод, помеченный атрибутом System.Runtime.InteropServices.ComRegisterFunctionAttribute или атрибутом System.Runtime.InteropServices.ComUnregisterFunctionAttribute, видим извне.

CA1412

CA1412: помечайте интерфейсы ComSource как IDispatch

Тип помечен атрибутом System.Runtime.InteropServices.ComSourceInterfacesAttribute, однако по крайней мере один из указанных интерфейсов не помечен атрибутом System.Runtime.InteropServices.InterfaceTypeAttribute, значение которого равно ComInterfaceType.InterfaceIsIDispatch.

CA1413

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

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

CA1414

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

Логический тип данных имеет несколько представлений в неуправляемом коде.

CA1415

CA1415: правильно объявляйте методы P/Invoke

Это правило используется для поиска объявлений методов вызова операционной системы, предназначенных для функций Win32, имеющих указатель на параметр структуры OVERLAPPED, если соответствующий управляемый параметр не является указателем на структуру System.Threading.NativeOverlapped.

CA1500

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

Метод экземпляра объявляет параметр или локальную переменную, чье имя совпадает с именем поля экземпляра объявляющего типа, что ведет к возникновению ошибок.

CA1501

CA1501: избегайте излишнего наследования

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

CA1502

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

Это правило измеряет число линейно независимых путей в методе, которое определяется числом и сложностью условных ветвей.

CA1504

CA1504: проверьте имена полей, которые могут ввести в заблуждение

Имя поля экземпляра начинается с "s_" или имя статического (Shared в Visual Basic) поля начинается с "m_".

CA1505

CA1505. Избегайте кода, неудобного для поддержки

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

CA1506

CA1506: избегайте чрезмерного соединения классов

Данное правило измеряет соединение классов посредством подсчета количества уникальных ссылок на типы, содержащихся в типе или методе.

CA1600

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

Не задавайте для приоритета процесса значение Idle. Процессы с приоритетом System.Diagnostics.ProcessPriorityClass.Idle будут занимать ЦП, который иначе простаивал бы, и тем самым блокировать работу в режиме ожидания.

CA1601

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

Повышение частоты периодических действий приводит к дополнительной нагрузке на ЦП и препятствует работе таймеров энергосберегающих режимов, которые отключают монитор и жесткие диски.

CA1700

CA1700: не следует называть значения перечислений именем "Reserved"

В данном правиле предполагается, что член перечисления, имя которого содержит слово "reserved", не используется в настоящее время, а является местозаполнителем, который будет в дальнейшем переименован или удален. Переименование или удаление элемента — это критическое изменение.

CA1701

CA1701: соблюдайте правильность регистра в составных словах строк ресурса

Каждое слово в строке ресурса разделяется на лексемы на основе регистра (заглавных букв). Каждое непрерывное сочетание двух токенов проверяется библиотекой проверки орфографии Майкрософт. При совпадении слово создает нарушение правила.

CA1702

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

Имя идентификатора состоит из нескольких слов, и по крайней мере одно из них является составным словом в неправильном регистре.

CA1703

CA1703: соблюдайте правильность написания строк ресурсов

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

CA1704

CA1704: идентификаторы должны иметь правильное написание

Имя видимого для внешнего кода идентификатора содержит одно или несколько слов, не распознаваемых библиотекой средства проверки орфографии (Microsoft).

CA1707

CA1707: идентификаторы не должны содержать знак подчеркивания

В соответствии с соглашением имена идентификаторов не могут содержать знак подчеркивания (_). Это правило позволяет проверить пространства имен, типы, элементы и параметры.

CA1708

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

Идентификаторы пространств имен, типов, членов и параметров не могут отличаться только регистром знаков, поскольку языки программирования, поддерживаемые средой CLR, не обязательно учитывают регистр знаков.

CA1709

CA1709: идентификаторы должны иметь правильный регистр

В соответствии с соглашением, в именах параметров используется смешанный регистр знаков, а в именах пространств имен, типов и членов — стиль языка Pascal.

CA1710

CA1710: идентификаторы должны иметь правильные суффиксы

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

CA1711

CA1711: идентификаторы не должны иметь неверных суффиксов

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

CA1712

CA1712: не добавляйте имя типа перед перечисляемыми значениями

Имена членов перечисления не должны содержать префиксов в виде имени типа, поскольку предполагается, что сведения о типе предоставляются средствами разработки.

CA1713

CA1713: имена событий не должны содержать префикс "before" или "after"

Имя события начинается с Before или After. Чтобы дать имена связанным событиям, возникающим в определенной последовательности, используйте настоящее или прошедшее время, чтобы обозначить положение события в последовательности действий.

CA1714

CA1714: имена перечислений флагов должны быть во множественном числе

Открытое перечисление содержит атрибут System.FlagsAttribute, и имя перечисления не заканчивается на "s". Имена типов, помеченных атрибутом FlagsAttribute, используются во множественном числе, поскольку данный атрибут указывает на возможность задания нескольких значений.

CA1715

CA1715: идентификаторы должны иметь правильные префиксы

Имя доступного для внешнего кода интерфейса не начинается с заглавной буквы "I". Имя параметра универсального типа в доступном для внешнего кода типе или методе не начинается с заглавной буквы "Т".

CA1716

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

Имя пространства имен или типа совпадает с ключевым словом, зарезервированным в языке программирования. Идентификаторы пространств имен и типов не должны совпадать с ключевыми словами, определенными в языках, поддерживаемых в среде CLR.

CA1717

CA1717: только перечисления FlagsAttribute должны иметь имена во множественном числе

Согласно правилам именования множественное число имени перечисления указывает, что одновременно можно задать несколько значений перечисления.

CA1719

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

Имя параметра должно передавать смысловое значение параметра, а имя члена — смысловое значение члена. Они могут совпадать лишь в очень редких случаях. Присвоение параметру имени содержащего его члена кажется неестественным и затрудняет использование библиотеки.

CA1720

CA1720: идентификаторы не должны содержать имен типов

Имя параметра в доступном для внешнего кода элементе содержит имя типа данных, или имя доступного для внешнего кода элемента содержит языковое имя типа данных.

CA1721

CA1721: имена свойств не должны совпадать с именами методов get

Имя открытого или защищенного элемента начинается с Get и соответствует имени открытого или защищенного свойства и по другим параметрам. Методы и свойства " Get" должны иметь имена, позволяющие четко различать их функции.

CA1722

CA1722: идентификаторы не должны иметь неверные префиксы

В соответствии с соглашением об именовании, только некоторые элементы программирования могут иметь имена, которые начинаются с особого префикса.

CA1724

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

Имена типов не должны совпадать с именами пространств имен, определенными в библиотеке классов .NET Framework. Нарушение этого правила приводит к уменьшению функциональности библиотеки.

CA1725

CA1725: имена параметров должны соответствовать базовому объявлению

Согласованное именование параметров в иерархии переопределений увеличивает удобство использования переопределений метода. Если имя параметра в производном методе отличается от имени в базовом объявлении, может возникнуть путаница в определении того, чем является метод: переопределением базового метода или новой перегрузкой.

CA1726

CA1726: используйте предпочтительные термины

Имя видимого снаружи идентификатора включает термин, для которого существует другой предпочтительный термин. Кроме того, имя содержит термин Flag или Flags.

CA1800

CA1800: не выполняйте лишних приведений

Повторяющиеся приведения снижают производительность, особенно если приведения выполняются в компактных операторах итераций.

CA1801

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

Сигнатура метода включает параметр, не использующийся в основной части метода.

CA1802

CA1802. Используйте литералы там, где возможно

Поле объявляется статичным и доступным только для чтения (Shared и ReadOnly в Visual Basic) и инициализируется со значением, вычисляемым во время компиляции. Поскольку значение, присвоенное конечному полю, вычисляется во время компиляции, замените объявление полем const (Const в Visual Basic), чтобы значение вычислялось не во время выполнения, а во время компиляции.

CA1804

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

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

CA1806

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

Создается, но никогда не используется новый объект, либо вызывается метод, который создает и возвращает новую строку, и такая новая строка никогда не используется, либо метод COM или P/Invoke возвращает HRESULT или код ошибки, который никогда не используется.

CA1809

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

Обычно для оптимизации производительности рекомендуется хранить значение не в памяти, а в регистре процессора. Это называется регистрацией значения. Чтобы повысить вероятность регистрации всех локальных переменных, следует ограничить их количество 64.

CA1810

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

Если в типе объявляется явный статический конструктор, компилятор JIT добавляет проверку в каждый статический метод и конструктор экземпляров этого типа, чтобы убедиться, что статический конструктор уже вызывался ранее. Проверки статических конструкторов могут привести к снижению производительности.

CA1811

CA1811: не используйте невызываемый закрытый код

Закрытый или внутренний член (член уровня сборки) не вызывается ни объектами сборки, ни средой CLR, ни делегатом.

CA1812

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

Экземпляр типа уровня сборки не создается кодом в сборке.

CA1813

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

В библиотеке классов .NET Framework предоставляются методы для извлечения пользовательских атрибутов. По умолчанию эти методы осуществляют поиск иерархии наследования атрибутов. Если запечатать атрибут, поиск в иерархии наследования выполняться не будет, в результате чего может повыситься производительность.

CA1814

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

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

CA1815

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

В унаследованной реализации Equals для типов значений используется библиотека отражения и сравнивается содержимое всех полей. Отражение является процессом, требующим с точки зрения вычислений больших затрат, и сравнение каждого поля на равенство может быть лишним. Если предполагается, что пользователи будут сравнивать, сортировать экземпляры или использовать их в качестве ключей хэш-таблиц, тип значения должен реализовывать Equals.

CA1816

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

Метод, являющийся реализацией Dispose, не вызывает GC.SuppressFinalize, либо метод, не являющийся реализацией Dispose, вызывает GC.SuppressFinalize, либо метод вызывает GC.SuppressFinalize и передает что-либо другое (Me в Visual Basic).

CA1819

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

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

CA1820

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

Сравнивать строки с использованием свойства String.Length или метода String.IsNullOrEmpty значительно быстрее, чем с помощью Equals.

CA1821

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

Если возможно, старайтесь не использовать финализаторы, поскольку из-за отслеживания жизненного срока объектов снижается производительность программы. Пустой метод завершения создает дополнительную нагрузку на систему, не обеспечивая никаких преимуществ.

CA1822

CA1822: помечайте члены как статические

Члены, не обращающиеся к данным экземпляра и не вызывающие методы экземпляра, можно пометить как статические (Shared в Visual Basic). Если пометить методы как статические, компилятор предоставит этим членам невиртуальные места вызова. Это обеспечивает значительное повышение производительности при работе с кодом, для которого важна высокая производительность системы.

CA1823

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

Обнаружены закрытые поля, доступ к которым, судя по всему, не предоставляется в сборке.

CA1824

CA1824: следует помечать сборки атрибутом NeutralResourcesLanguageAttribute

Атрибут NeutralResourcesLanguage сообщает ResourceManager о языке, используемом для отображения независящих от языка и региональных параметров ресурсов для сборки. При этом повышается эффективность поиска первого загружаемого ресурса и может сократиться рабочее множество.

CA1900

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

Это правило проверяет правильность выравнивания структур, объявленных с явной разметкой, при маршалировании в неуправляемый код на 64-разрядных операционных системах.

CA1901

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

Данное правило вычисляет размер каждого параметра и возвращаемого значения вызова P/Invoke и проверяет правильность размера параметра при маршалировании в неуправляемый код на 32-разрядных и 64-разрядных операционных системах.

CA1903

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

Член или тип использует член или тип, который был впервые представлен в пакете обновления, не включенном в целевую среду проекта.

CA2000

CA2000: удалите объекты до того, как будет потеряна область действия

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

CA2001

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

Член вызывает потенциально опасный или проблемный метод.

CA2002

CA2002: не блокировать объекты со слабой идентификацией

К объекту со слабой идентификацией может быть получен прямой доступ через границы домена приложения. Поток пытается получить блокировку объекта со слабой идентификацией, который может быть заблокирован вторым потоком в другом домене приложения, имеющим блокировку того же объекта.

CA2003

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

Управляемый поток обрабатывается как поток Win32.

CA2004

CA2004: удалите вызовы GC.KeepAlive

При переходе к использованию класса SafeHandle необходимо удалить все вызовы метода GC.KeepAlive (объект). В этом случаев классам не требуется вызывать метод GC.KeepAlive. При этом предполагается, что для завершения дескриптора ОС они используют не метод завершения, а класс SafeHandle.

CA2006

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

Использование указателя IntPtr в управляемом коде может указывать на потенциальную проблему безопасности и надежности. Необходимо изучить все случаи использования указателя IntPtr, чтобы определить, не следует ли использовать вместо него класс SafeHandle или другую подобную технологию.

CA2100

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

Метод задает свойство System.Data.IDbCommand.CommandText с использованием строки, созданной из строкового аргумента метода. Это правило предполагает, что строковый аргумент содержит введенные пользователем данные. Созданная из введенных пользователем данных командная строка SQL уязвима перед атаками путем внедрения кода SQL.

CA2101

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

Член вызова неуправляемого кода, разрешающий вызовы с частичным доверием, содержит строковый параметр и не выполняет явный маршалинг и преобразование этой строки. Это может стать причиной потенциальной уязвимости безопасности.

CA2102

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

Элемент в сборке, не помеченной атрибутом RuntimeCompatibilityAttribute или помеченной атрибутом RuntimeCompatibility(WrapNonExceptionThrows = false), содержит блок catch, который обрабатывает исключения System.Exception, однако непосредственно за этим блоком не следует общий блок catch.

CA2103

CA2103: проверьте императивную безопасность

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

CA2104

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

Видимый извне тип содержит видимое извне и доступное только для чтение поле, являющееся изменяемым ссылочным типом. Изменяемый тип — это тип, экземпляр которого может быть изменен.

CA2105

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

При применении модификатора "только для чтения" (ReadOnly в Visual Basic) к полю, содержащему массив, это поле нельзя изменить, связав его с другим массивом. Однако элементы массива, хранящегося в доступном только для чтения поле, можно будет изменить.

CA2106

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

Метод подтверждает разрешения без выполнения проверок безопасности для вызывающего объекта. Подтверждение разрешений безопасности без выполнения проверок безопасности может привести к возникновению в коде уязвимости системы безопасности, которой могут воспользоваться злоумышленники.

CA2107

CA2107: проверьте использование deny и permit only

Метод PermitOnly и действия безопасности CodeAccessPermission.Deny следует использовать только в том случае, когда разработчик хорошо разбирается в работе системы безопасности .NET Framework. Код, который использует эти действия безопасности, должен быть тщательно проанализирован на предмет безопасности.

CA2108

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

Открытый или защищенный тип значения защищен средствами доступа к данным или требованиями ссылки.

CA2109

CA2109: проверьте видимые обработчики событий

Обнаружен открытый или защищенный метод обработки событий. Методы обработки событий следует раскрывать только в тех случаях, когда это совершенно необходимо.

CA2111

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

Указатель не является закрытым, внутренним или доступным только для чтения. Вредоносный код может изменить значение указателя, что потенциально приведет к предоставлению доступа к произвольным областям памяти или сбоям приложения или системы.

CA2112

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

Открытый или защищенный тип содержит открытые поля и защищен требованиями ссылки. Если код имеет доступ к экземпляру типа, защищенного запросом компоновки, то для получения доступа к полям типа коду не требуется удовлетворять запросу компоновки.

CA2114

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

Метод не должен обладать декларативной безопасностью для одного и того же действия, как на уровне метода, так и на уровне типа.

CA2115

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

Данное правило обнаруживает ошибки, которые могут возникать из-за завершения неуправляемых ресурсов, по-прежнему используемых в машинном коде.

CA2116

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

Если в полностью доверенной сборке присутствует атрибут APTCA (AllowPartiallyTrustedCallersAttribute) и она выполняет код в другой сборке, для которой не разрешены частично доверенные вызовы, возможно возникновение уязвимости безопасности.

CA2117

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

Если сборка с полным доверием помечена атрибутом APTCA и тип в сборке наследует от типа, который не разрешает вызовы с неполным доверием, возможно возникновение уязвимости для эксплойта.

CA2118

CA2118: обзор использования SuppressUnmanagedCodeSecurityAttribute

Атрибут SuppressUnmanagedCodeSecurityAttribute изменяет поведение системы безопасности, определенное по умолчанию, для элементов, выполняющих неуправляемый код за счет COM-взаимодействия или вызова операционной системы. Этот атрибут служит в основном для повышения производительности; однако, прирост производительности сопряжен со значительными рисками безопасности.

CA2119

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

Наследуемый открытый тип предоставляет реализацию переопределяемого метода внутреннего (Friend в Visual Basic) интерфейса. Для устранения нарушения данного правила следует исключить возможность переопределения метода за пределами сборки.

CA2120

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

Для этого типа предусмотрен конструктор, который принимает объекты System.Runtime.Serialization.SerializationInfo и System.Runtime.Serialization.StreamingContext (сигнатура конструктора сериализации). Этот конструктор не защищен проверкой безопасности, однако один или несколько обычных конструкторов этого типа защищены.

CA2121

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

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

CA2122

CA2122: не используйте косвенное представление методов с запросами компоновки

У открытого или защищенного члена есть требования ссылки, и он вызывается членом, который не выполняет какие-либо проверки безопасности. Запрос компоновки проверяет разрешения только непосредственно вызывающего метода.

CA2123

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

Это правило сравнивает метод с его базовым методом (который является интерфейсом или виртуальным методом другого типа), а затем сравнивает запросы ссылок для каждого из них. Если это правило нарушается, то вредоносный вызывающий объект может обойти запрос ссылок путем вызова небезопасного метода.

CA2124

CA2124: помещайте уязвимые предложения finally во внешний блок try

Открытый или защищенный метод содержит блок try/finally. Блок finally сбрасывает состояние безопасности и не заключен в блок finally.

CA2126

CA2126: запросы компоновки типа требуют запросы наследования

Открытый незапечатанный тип защищен требованием ссылки и имеет переопределяемый метод. Ни тип, ни метод не защищены с помощью требования наследования.

CA2127

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

В сборке, прозрачной на 100 процентов, не может содержаться критический код. Данное правило позволяет проанализировать сборки, прозрачные на 100 процентов, в поисках аннотаций SecurityCritical на уровне типов, полей и методов.

CA2128

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

Это правило позволяет проанализировать все методы и типы в сборке, которая является либо на 100 процентов прозрачной, либо смешанной (прозрачной и критической) и пометить декларативное и императивное использование Assert.

CA2129

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

Методы, помеченные атрибутом SecurityTransparentAttribute, вызывают закрытые члены, помеченные как SecurityCritical. Это правило позволяет проанализировать все методы и типы в смешанной (прозрачной и критической) сборке и пометить все вызовы закрытого критического кода из прозрачного кода, которые не помечены как SecurityTreatAsSafe.

CA2130

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

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

CA2131

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

Тип участвует в эквивалентности типов, а сам тип или член или поле типа помечены атрибутом SecurityCriticalAttribute. Это правило применяется ко всем критическим типам или к типам, содержащим критические методы или поля, участвующие в эквивалентности типов. Когда среда CLR обнаруживает такой тип, она не загружает его и выдает исключение TypeLoadException во время выполнения. Обычно это правило применяется, только когда пользователи вручную реализуют эквивалентность типов, вместо использования tlbimp и компиляторов.

CA2132

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

Типы и члены с атрибутом SecurityCriticalAttribute не могут использоваться в коде приложений Silverlight. Критические с точки зрения безопасности типы и члены можно использовать только в доверенном коде в библиотеке классов .NET Framework для Silverlight. Поскольку открытая или защищенная конструкция в производном классе должна иметь ту же или большую прозрачность, чем ее базовый класс, класс в приложении не может быть производным от класса, помеченного как SecurityCritical.

CA2133

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

Это предупреждение вызывается методом, который привязывает делегат, помеченный атрибутом SecurityCriticalAttribute, к методу, который является прозрачным или помечен атрибутом SecuritySafeCriticalAttribute. Предупреждение также выдается для метода, который привязывает прозрачный или безопасный делегат к критическому методу.

CA2134

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

Это правило применяется, когда метод, помеченный атрибутом SecurityCriticalAttribute, переопределяет прозрачный метод или метод, помеченный атрибутом SecuritySafeCriticalAttribute. Это правило также применяется, когда прозрачный метод или метод, помеченный атрибутом SecurityCriticalAttribute, переопределяет метод, помеченный атрибутом SecuritySafeCriticalAttribute. Это правило применяется при переопределении виртуального метода или реализации интерфейса.

CA2135

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

Требования LinkDemand являются устаревшими в наборе правил безопасности уровня 2. Вместо использования требования LinkDemand для обеспечения безопасности во время JIT-компиляции пометьте методы, типы и поля атрибутом SecurityCriticalAttribute.

CA2136

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

Атрибуты прозрачности применяются из элементов кода большей области к элементам меньшей области. Атрибуты прозрачности элементов кода с большей областью имеют приоритет по сравнению с атрибутами прозрачности элементов кода, которые содержатся в первом элементе. Например, класс, помеченный атрибутом SecurityCriticalAttribute, не может содержать метод, помеченный атрибутом SecuritySafeCriticalAttribute.

CA2137

CA2137: прозрачные методы должны содержать только проверяемые IL

Метод содержит непроверяемый код или возвращает тип по ссылке. Это правило срабатывает при попытках прозрачного кода безопасности выполнить непроверяемый MISL. Однако это правило не содержит полную проверку IL, и вместо нее использует эвристику для выявления большинства нарушений проверки MSIL.

CA2138

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

Прозрачный с точки зрения безопасности метод вызывает метод, помеченный атрибутом SuppressUnmanagedCodeSecurityAttribute.

CA2139

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

Это правило запускается любым прозрачным методом, который пытается обработать исключение повреждения процесса с помощью атрибута HandleProcessCorruptedStateExceptionsAttribute. Исключение повреждения процесса – это классификация версии 4.0 среды CLR таких исключений, как AccessViolationException. Атрибут HandleProcessCorruptedStateExceptionsAttribute может использоваться только критичными в плане безопасности методами и будет игнорироваться при применении для прозрачного метода.

CA2140

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

Элемент кода, помеченный атрибутом SecurityCriticalAttribute, является критическим с точки зрения безопасности. Прозрачный метод не может использовать элемент, критический с точки зрения безопасности. Если прозрачный тип пытается использовать тип, критический с точки зрения безопасности, то вызывается исключение TypeAccessException, MethodAccessException или FieldAccessException.

CA2141

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

Прозрачный с точки зрения безопасности метод вызывает метод в сборке, не помеченной атрибутом APTCA, либо прозрачный с точки зрения безопасности метод удовлетворяет требованию LinkDemand по типу или методу.

CA2142

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

Это правило срабатывает для прозрачных методов, для доступа к которым требуется LinkDemand. Прозрачный для системы безопасности код не должен отвечать за проверку безопасности операции и поэтому не должен требовать разрешений.

CA2143

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

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

CA2144

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

Проверка безопасности для прозрачного кода не так тщательна, как проверка безопасности для критического кода, поскольку прозрачный код не может выполнять действия, требующие особых мер безопасности. Сборки, загруженные из массива байтов, могут остаться незамеченными в прозрачном коде, и этот массив байтов может содержать критичный или, что более важно, критичный в плане безопасности код, который подлежит аудиту.

CA2145

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

Методы, оснащенные атрибутом SuppressUnmanagedCodeSecurityAttribute, имеют неявную проверку LinkDemand, применяемую к любому вызывающему их методу. Для этой проверки LinkDemand требуется, чтобы вызывающий код был критическим с точки зрения безопасности. Пометка метода, который использует SuppressUnmanagedCodeSecurity с атрибутом SecurityCriticalAttribute, делает это требование более очевидным для тех, кто вызывает этот метод.

CA2146

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

Это правило срабатывает, если у производного типа есть атрибут прозрачности безопасности, не такой критический, как базовый тип или реализованный интерфейс. От критических базовых типов или реализованных критических интерфейсов могут производиться только критические типы, и от критических в плане безопасности базовых типов или реализованных интерфейсов могут производиться только критические в плане безопасности типы.

CA2147

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

Коду, помеченному атрибутом SecurityTransparentAttribute, не предоставляются достаточные для утверждения разрешения.

CA2149

CA2149: прозрачные методы не следует вызывать в машинном коде

Это правило применяется в любом прозрачном методе, который напрямую вызывает машинный код (например, с помощью P/Invoke). Нарушение этого правила приводит к исключению MethodAccessException на уровне 2 модели прозрачности и вызову полного требования UnmanagedCode на уровне 1 модели прозрачности.

CA2200

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

В операторе throw повторно создается и явным образом задается исключение. Если исключение повторно создается заданием исключения в операторе throw, список вызовов метода между исходным методом, создавшим исключение, и текущим методом будет утерян.

CA2201

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

Из-за этого становится трудно обнаружить и отладить изначальную ошибку.

CA2202

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

Реализация метода содержит пути кода, которые могли стать причиной многократного вызова метода System.IDisposable.Dispose или эквивалентного метода Dispose (например, метода Close() для некоторых типов) для одного и того же объекта.

CA2204

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

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

CA2205

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

Определен метод вызова операционной системы, при этом в библиотеке классов .NET Framework существует метод с эквивалентной функциональностью.

CA2207

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

Тип значения объявляет явный статический конструктор. Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор.

CA2208

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

Вызывается конструктор по умолчанию (без параметров), принадлежащий к типу исключения ArgumentException или унаследованный от него, или неправильный аргумент строки передается параметризованному конструктору, принадлежащему к типу исключения ArgumentException или унаследованному от него.

CA2210

CA2210: сборки должны иметь допустимые строгие имена

Строгое имя защищает клиентов от случайной загрузки сборки, которая была подменена. Сборки без строгих имен следует развертывать лишь в крайне небольшом числе случаев. При обмене или распространении сборок без правильной подписи сборки могут быть подменены, среда CLR может не загрузить сборку или пользователь может быть вынужден отключить проверку на своем компьютере.

CA2211

CA2211: неконстантные поля должны быть скрыты

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

CA2212

CA2212: не следует помечать обслуживаемые компоненты атрибутом WebMethod

Метод в типе, унаследованном от System.EnterpriseServices.ServicedComponent, помечен атрибутом System.Web.Services.WebMethodAttribute. Так как атрибут WebMethodAttribute и метод ServicedComponent имеют разное поведение и предъявляют конфликтующие требования к контексту и потоку транзакций, в некоторых сценариях поведение метода будет неправильным.

CA2213

CA2213: следует высвобождать высвобождаемые поля

Тип, реализующий System.IDisposable, объявляет поля, принадлежащие к типам, которые также реализуют IDisposable. Метод Dispose поля не вызывается методом Dispose объявляющего типа.

CA2214

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

Когда конструктор вызывает виртуальный метод, возможна ситуация, когда конструктор для экземпляра, вызывающего метод, не выполняется.

CA2215

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

Если тип наследуется от удаляемого типа, он должен вызвать метод Dispose базового типа из собственного метода Dispose.

CA2216

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

Тип, который реализует System.IDisposable и имеет поля, предусматривающие использование неуправляемых ресурсов, не реализует метод завершения, как описано в Object.Finalize.

CA2217

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

Доступное для внешнего кода перечисление помечено атрибутом FlagsAttribute и имеет одно или несколько значений, которые не являются степенью двойки или сочетанием других определенных значений в перечислении.

CA2218

CA2218: переопределяйте GetHashCode при переопределении Equals

GetHashCode возвращает значение на основе текущего экземпляра, используемое для алгоритмов хэширования и структур данных, таких как хэш-таблица. Два равных объекта, принадлежащие к одному и тому же типу, должны возвращать один и тот же хэш-код.

CA2219

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

Если исключение создается в предложении finally или fault, новое исключение скрывает активное исключение. Если исключение создается в предложении filter, среда выполнения перехватывает исключение без оповещения. Из-за этого становится трудно обнаружить и отладить изначальную ошибку.

CA2220

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

Финализация должна распространятся посредством иерархии наследования. Для этого типы должны вызывать свой метод Finalize базового класса из собственного метода Finalize.

CA2221

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

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

CA2222

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

Не следует изменять модификатор доступа для унаследованных членов. Если сделать унаследованный член закрытым, то доступ вызывающих объектов к реализации метода базового класса все равно не будет запрещен.

CA2223

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

Среда CLR позволяет использовать возвращаемые типы для различения совпадающих в остальном членов, однако эта функция не входит в спецификацию CLS и поддерживается не всеми языками программирования .NET.

CA2224

CA2224: переопределяйте равенство при перегрузке оператора равенства

Открытый тип реализует оператор равенства, но не переопределяет Object.Equals.

CA2225

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

Обнаружена перегрузка оператора, однако не найден ожидаемый именованный альтернативный метод. Именованный альтернативный член предоставляет те же функции, что и основной оператор, и его могут использовать разработчики, которые программируют на языках, не поддерживающих перегрузку операторов.

CA2226

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

Тип реализует оператор равенства или неравенства, но не реализует противоположный оператор.

CA2227

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

Свойство коллекции, допускающее запись, позволяет пользователю заменять одну коллекцию другой. Свойство только для чтения предотвращает замену коллекции, но по-прежнему допускает установку, настройку отдельных членов.

CA2228

CA2228: не следует поставлять невыпущенные форматы ресурсов

Файлы ресурсов, созданные с помощью предварительных версий .NET Framework, могут не работать в поддерживаемых версиях платформы .NET Framework.

CA2229

CA2229: применяйте конструкторы сериализации

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

CA2230

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

Открытый или защищенный тип содержит открытый или защищенный метод, который использует соглашение о вызовах VarArgs вместо ключевого слова params.

CA2231

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

Тип значения переопределяет Object.Equals, но не реализует оператор равенства.

CA2232

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

Атрибут STAThreadAttribute указывает, что потоковой моделью COM для приложения является однопотоковое подразделение. Данный атрибут должен находиться в точке входа любого приложения, использующего Windows Forms; если он отсутствует, компоненты Windows могут работать неправильно.

CA2233

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

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

CA2234

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

Вызывается метод, имеющий параметр строки, имя которого содержит uri, URI, urn, URN, url или URL. Объявляющий тип метода содержит соответствующую перегрузку метода, которая имеет параметр System.Uri.

CA2235

CA2235: помечайте все несериализуемые поля

Экземпляр поля несериализуемого типа объявлен в сериализуемом типе.

CA2236

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

Чтобы устранить нарушение этого правила, вызовите метод базового типа GetObjectData или конструктор сериализации из соответствующего метода производного типа или конструктора.

CA2237

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

Чтобы среда CLR распознавала тип как сериализуемый, он должен быть помечен атрибутом SerializableAttribute, даже если тип использует пользовательскую процедуру сериализации посредством реализации интерфейса ISerializable.

CA2238

CA2238: следует правильно реализовывать методы сериализации

Метод, обрабатывающий событие сериализации, не имеет правильной сигнатуры, возвращаемого типа или отображения.

CA2239

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

Тип имеет поле, помеченное атрибутом System.Runtime.Serialization.OptionalFieldAttribute, и не предоставляет методы обработки событий десериализации.

CA2240

CA2240: правильно реализуйте ISerializable

Чтобы устранить нарушение данного правила, сделайте метод GetObjectData доступным для внешнего кода и переопределяемым и убедитесь, что все поля экземпляра включены в процесс сериализации или явно помечены атрибутом NonSerializedAttribute.

CA2241

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

Аргумент формата, переданный методу System.String.Format, не содержит элемент форматирования, соответствующий каждому аргументу объекта, или наоборот.

CA2242

CA2242: правильно выполняйте проверку NaN

Это выражение проверяет значение на соответствие Single.Nan или Double.Nan. Используйте Single.IsNan(Single) или Double.IsNan(Double) для проверки значения.

CA2243

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

Не удается правильно выполнить синтаксический анализ параметра строкового литерала атрибута для URL-адреса, идентификатора GUID или версии.