Предупреждения при анализе управляемого кода по идентификатору CheckId
В следующей таблице перечислены предупреждения анализа управляемого кода по идентификатору CheckId предупреждения.
Предупреждения
CheckId |
Предупреждение |
Описание |
---|---|---|
CA1000 |
CA1000: не объявляйте статические элементы в универсальных типах |
При вызове статического элемента универсального типа нужно указать аргумент этого типа. При вызове универсального экземпляра элемента, не поддерживающего вывод типа, для элемента нужно указать аргумент типа. В этих двух случаях синтаксис для определения аргумента типа различен, и его можно легко спутать. |
CA1001 |
CA1001: типы, которым принадлежат освобождаемые поля, должны быть освобождаемыми |
В классе объявляется и реализуется поле экземпляра, которое принадлежит типу System.IDisposable, однако класс не реализует интерфейс IDisposable. Класс, в котором объявляется поле IDisposable, неявно владеет неуправляемым ресурсом и должен реализовывать интерфейс IDisposable. |
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 |
Видимый извне метод содержит ссылочный параметр типа System.Object. Использование универсального метода позволяет передавать в метод все типы без предварительного приведения к типу ссылочного параметра при условии выполнения некоторых ограничений. |
|
CA1008 |
Значение по умолчанию неинициализированного перечисления, как и других типов значений, равно нулю. Перечисление без флагов в качестве атрибутов должно определять член с использованием нулевого значения так, чтобы значение по умолчанию было допустимым значением перечисления. Если перечисление с примененным атрибутом FlagsAttribute определяет член с нулевым значением, для него должно быть задано имя None, свидетельствующее о том, что в перечислении не были заданы значения. |
|
CA1009 |
Методы обработчиков событий принимают два параметра. Первый параметр принадлежит типу System.Object и называется "sender". Это объект, вызвавший событие. Второй параметр принадлежит типу System.EventArgs и называется "e". Это данные, связанные с событием. Методы обработки событий не должны возвращать значение; в языке программирования C# оно обозначается возвращаемым типом void. |
|
CA1010 |
CA1010: коллекции должны реализовывать универсальный интерфейс |
Чтобы расширить возможности использования коллекции, реализуйте один из универсальных интерфейсов коллекции. Затем данную коллекцию можно использовать для заполнения универсальных типов коллекции. |
CA1011 |
CA1011: попробуйте передать базовые типы в качестве параметров |
Если в объявлении метода в качестве параметра указан базовый тип, любой тип, производный от базового, можно передать методу в качестве соответствующего аргумента. Если дополнительные функции, предоставляемые производным типом параметра, не требуются, то использование базового типа позволит более широко применять данный метод. |
CA1012 |
Конструкторы абстрактных типов могут быть вызваны только производными типами. Открытые конструкторы создают экземпляры типа. Невозможно создавать экземпляры абстрактного типа; абстрактный тип с открытым конструктором является недопустимым. |
|
CA1013 |
CA1013: перегружайте оператор равенства при перегрузке сложения и вычитания |
Открытый или защищенный тип реализует операторы сложения или вычитания без реализации оператора равенства. |
CA1014 |
Спецификация среды CLS определяет ограничения по именованию, типам данных и правилам, которым должны соответствовать сборки, предназначенные для использования в нескольких языках программирования. Для всех сборок рекомендуется явным образом указывать совместимость с CLS с помощью атрибута CLSCompliantAttribute. Если этот атрибут у сборки отсутствует, сборка несовместима. |
|
CA1016 |
.NET Framework использует номер версии для уникального обозначения сборки и для привязки к типам в сборках со строгими именами. Номер версии используется наряду с политикой версий и издателя. По умолчанию приложения выполняются только с версией сборки, которая использовалась для их построения. |
|
CA1017 |
Атрибут ComVisibleAttribute определяет порядок обращения клиентов COM к управляемому коду. Для правильной разработки сборки должны явным образом указывать видимость COM. Можно задать видимость COM для всей сборки, а затем переопределить ее для отдельных типов и элементов типов. Если атрибут отсутствует, содержимое сборки будет видимым клиентам COM. |
|
CA1018 |
При определении настраиваемого атрибута его нужно пометить атрибутом AttributeUsageAttribute, чтобы указать, где можно применять этот настраиваемый атрибут в исходном коде. Допустимое положение атрибута в коде зависит от значения атрибута и его применения. |
|
CA1019 |
CA1019: необходимо определять методы доступа для аргументов атрибутов |
Атрибуты могут определять обязательные аргументы, которые должны быть указаны при применении атрибута к целевому объекту. Они также известны как позиционные аргументы, поскольку предоставляются для конструкторов атрибутов в качестве позиционных параметров. Для каждого обязательного аргумента атрибут должен предоставлять соответствующее свойство, доступное только для чтения, чтобы извлечь значение аргумента во время выполнения. Кроме того, атрибуты могут определять дополнительные параметры, известные как именованные аргументы. Эти аргументы предоставляются для конструкторов атрибутов по имени и должны иметь соответствующее свойство чтения/записи. |
CA1020 |
CA1020: не используйте пространства имен с несколькими типами |
Убедитесь, что каждое из используемых пространств имен имеет логическую организацию и существует веская причина для помещения типов в сильно разреженное пространство имен. |
CA1021 |
Для реализации передачи типов по ссылке (с помощью ключевого слова out или ref) от разработчика требуется опыт работы с указателями, понимание отличия между типами значения и ссылочными типами и умение работать с методами с несколькими возвращаемыми значениями. Кроме того, далеко не все понимают разницу между параметрами out и ref. |
|
CA1023 |
Для индексаторов (индексированных свойств) должен использоваться один индекс. Многомерные индексаторы могут крайне отрицательно сказаться на удобстве работы с библиотекой. |
|
CA1024 |
Имя открытого или защищенного метода начинается с Get, он не принимает параметры и возвращает значение, не являющееся массивом. Возможно, этот метод лучше преобразовать в свойство. |
|
CA1025 |
CA1025: замените повторяющиеся аргументы массивом параметров |
Если точное число аргументов неизвестно и эти аргументы принадлежат одному типу или могут быть переданы как аргументы одного типа, используйте вместо повторяющихся аргументов массив параметров. |
CA1026 |
Методы, использующие параметры по умолчанию, разрешены по спецификации CLS; однако спецификация CLS разрешает компиляторам не учитывать значения, присвоенные этим параметрам. Для однородной работы с различными языками программирования следует заменять методы, использующие параметры по умолчанию, на перегрузки методов, предоставляющие параметры по умолчанию. |
|
CA1027 |
CA1027: следует помечать перечисления атрибутом FlagsAttribute |
Перечисление является типом значения, которое определяет набор связанных именованных констант. Атрибут FlagsAttribute применяется к перечислению, когда его именованные константы могут быть объединены осмысленным образом. |
CA1028 |
Перечисление является типом значения, которое определяет набор связанных именованных констант. По умолчанию для хранения значения константы используется тип данных System.Int32. Этот базовый тип можно изменить, но это не требуется и в большинстве случаев не рекомендуется. |
|
CA1030 |
Данное правило отслеживает методы с именами, которые, как правило, используются для событий. Если метод вызывается в ответ на четко определенное изменение состояния, то этот вызов должен осуществляться с помощью обработчика событий. Объекты, вызывающие методы, должны создавать события, а не вызывать методы напрямую. |
|
CA1031 |
Общие исключения не должны перехватываться. Нужно перехватить исключение более конкретного характера или повторно выдать общее исключение в последнем операторе блока catch. |
|
CA1032 |
Для правильной обработки исключений необходимо предоставить полный набор конструкторов. |
|
CA1033 |
CA1033: методы интерфейса должны быть доступны для вызова дочерним типам |
Незапечатанный тип, доступный для внешнего кода, предоставляет явную реализацию метода открытого интерфейса и не предоставляет доступный для внешнего кода альтернативный метод с тем же именем. |
CA1034 |
Вложенный тип — это тип, объявленный внутри области другого типа. Вложенные типы удобно использовать для инкапсуляции закрытых сведений о реализациях содержащего их типа. В силу этого вложенные типы не должны быть видимыми для внешнего кода. |
|
CA1035 |
CA1035: в составе реализаций ICollection есть строго типизированные элементы |
Это правило требует, чтобы реализации ICollection предоставляли строго типизированные элементы, поскольку тогда пользователям не придется приводить аргументы к типу Object при использовании функциональных возможностей интерфейса. В этом правиле предполагается, что тип, реализующий интерфейс ICollection, делает это для управления коллекцией экземпляров типа, более строгого, чем Object. |
CA1036 |
Открытый или защищенный тип реализует интерфейс System.IComparable. Он не переопределяет метод Object.Equals и не перегружает языковой оператор равенства, неравенства, "больше" или "меньше". |
|
CA1038 |
Это правило требует, чтобы реализации IEnumerator предоставляли строго типизированную версию свойства Current, поскольку тогда пользователям не придется приводить возвращаемое значение к строгому типу при использовании функциональных возможностей интерфейса. |
|
CA1039 |
Это правило требует, чтобы реализации IList предоставляли строго типизированные элементы, поскольку тогда пользователям не придется приводить аргументы к типу System.Object при использовании функциональных возможностей интерфейса. |
|
CA1040 |
Интерфейсы определяют члены, предоставляющие поведение или соглашение об использовании. Функциональность, описанная интерфейсом, может быть использована любым типом вне зависимости от расположения типа в иерархии интерфейса. Тип реализует интерфейс путем предоставления реализаций для членов интерфейса. Пустой интерфейс не определяет никаких элементов, поэтому он не определяет контракт, который можно реализовать. |
|
CA1041 |
Тип или элемент помечен атрибутом System.ObsoleteAttribute, для которого не указано свойство ObsoleteAttribute.Message. При компиляции типа или элемента, помеченного атрибутом ObsoleteAttribute, отображается текст свойства Message этого атрибута. Это предоставляет пользователю сведения об устаревшем типе или члене. |
|
CA1043 |
CA1043: используйте целый или строковый аргумент для индексаторов |
Индексаторы (индексированные свойства) должны использовать для индекса целочисленные или строковые типы. Эти типы обычно используются для индексации структур данных и повышения удобства использования библиотеки. Тип Object следует использовать только в том случае, если во время разработки невозможно указать определенный целочисленный или строковый тип. |
CA1044 |
Несмотря на то, что допустимо, а часто и необходимо иметь свойство, доступное только на чтение, рекомендации по разработке запрещают использование свойств, доступных только на запись. Это связано с тем, что если позволить пользователю задать значение, а затем запретить ему просматривать это значение, то таким образом не будет обеспечиваться какая-либо безопасность. Кроме того, при отсутствии доступа на чтение нельзя просмотреть состояние общих объектов, что снижает их полезность. |
|
CA1045 |
Для реализации передачи типов по ссылке (с помощью ключевого слова out или ref) от разработчика требуется опыт работы с указателями, понимание отличия между типами значения и ссылочными типами и умение работать с методами с несколькими возвращаемыми значениями. Архитекторам, разрабатывающим библиотеки для широкого использования, не следует рассчитывать, что пользователи прекрасно разбираются в использовании параметров out и ref. |
|
CA1046 |
CA1046: не перегружайте оператор равенства для ссылочных типов |
Реализация оператора равенства по умолчанию почти всегда правильно работает для ссылочных типов. По умолчанию две ссылки равны, если они указывают на один объект. |
CA1047 |
CA1047: не объявляйте защищенные элементы в запечатанных типах |
Типы объявляют защищенный члены таким образом, чтобы наследующие типы могли получить доступ к члену или переопределить его. По определению наследовать запечатанные типы нельзя; это означает, что вызов защищенных методов для запечатанных типов невозможен. |
CA1048 |
CA1048: не объявляйте виртуальные элементы в запечатанных типах |
Типы объявляют методы как виртуальные, чтобы наследующие типы могли переопределять реализацию виртуального метода. По определению наследовать запечатанный тип нельзя. При этом виртуальный метод запечатанного типа теряет смысл. |
CA1049 |
CA1049: типы, которым принадлежат собственные ресурсы, должны быть высвобождаемыми |
Типы, выделяющие неуправляемые ресурсы, должны реализовывать интерфейс IDisposable, чтобы вызывающие методы могли высвобождать эти ресурсы по требованию и сокращать время существования объектов, занимающих ресурсы. |
CA1050 |
Типы объявляются в пространствах имен во избежание конфликтов имен и с целью упорядочения связанных типов в иерархии объектов. |
|
CA1051 |
Поля главным образом следует использовать для данных реализации. Поля должны быть помечены как private или internal и должны быть представлены с помощью свойств. |
|
CA1052 |
CA1052: типы со статическими заполнителями должны быть запечатаны |
Открытый или защищенный тип содержит только статические элементы и не объявлен с модификатором sealed (справочник по C#) (NotInheritable). Тип, для которого нельзя создавать унаследованные типы, должен быть помечен модификатором sealed, чтобы его нельзя было использовать как базовый тип. |
CA1053 |
CA1053: типы статических владельцев не должны иметь конструкторы |
В открытом или вложенном открытом типе объявляются только статические элементы и имеется открытый или защищенный конструктор по умолчанию. Конструктор не нужен, поскольку при вызове статических членов не требуется экземпляр типа. Для обеспечения безопасности перегруженная строка должна вызывать перегрузку универсального кода ресурса (URI), используя строковый аргумент. |
CA1054 |
Если метод принимает строковое представление универсального кода ресурса (URI), необходимо предоставить соответствующую перегрузку, принимающую экземпляр класса URI, который предоставляет эти услуги безопасным образом. |
|
CA1055 |
В этом правиле предполагается, что метод возвращает универсальный код ресурса (URI). В строковых представлениях кода URI часто встречаются ошибки синтаксического анализа и кодирования, которые могут привести к уязвимостям системы безопасности. Класс System.Uri предоставляет аналогичные услуги более надежным и безопасным способом. |
|
CA1056 |
В этом правиле предполагается, что свойство является универсальным кодом ресурса (URI). В строковых представлениях кода URI часто встречаются ошибки синтаксического анализа и кодирования, которые могут привести к уязвимостям системы безопасности. Класс System.Uri предоставляет аналогичные услуги более надежным и безопасным способом. |
|
CA1057 |
CA1057: перегрузки строковых параметров URI вызывают перегрузки System.Uri |
Тип объявляет перегрузки метода, которые отличаются только заменой строкового параметра на параметр System.Uri. Эта перегрузка, которая принимает строковый параметр, не вызывает перегрузку, которая принимает параметр URI. |
CA1058 |
Видимый извне тип расширяет некоторые базовые типы. Используйте только один вариант. |
|
CA1059 |
CA1059: члены не должны предоставлять определенные устойчивые типы |
Устойчивый тип – это тип, который имеет полную реализацию и экземпляр которого можно создать. Чтобы иметь возможность широкого использования этого элемента, замените конкретный тип предложенным интерфейсом. |
CA1060 |
Методы PInvoke, например методы, помеченные атрибутом System.Runtime.InteropServices.DllImportAttribute, или методы, определенные с помощью ключевого слова Declare в Visual Basic, обращаются к неуправляемому коду. Эти методы должны относиться к классу NativeMethods, SafeNativeMethods или UnsafeNativeMethods. |
|
CA1061 |
Метод в базовом типе скрыт методом с таким же именем в производном типе. Сигнатура параметра производного метода отличается только типами, которые являются более слабыми, чем соответствующие типы в сигнатуре параметра базового метода. |
|
CA1062 |
Все ссылочные аргументы, передаваемые в видимые для внешнего кода методы, должны проверяться на равенство значению NULL. |
|
CA1063 |
Все типы IDisposable должны правильно реализовывать шаблон "Dispose". |
|
CA1064 |
Внутреннее исключение видно только внутри своей внутренней области. После выхода исключения за пределы внутренней области для перехвата исключения можно использовать только базовое исключение. Если внутренне исключение унаследовано от T:System.Exception, T:System.SystemException или T:System.ApplicationException, внешний код не имеет достаточных данных для обработки исключения. |
|
CA1065 |
Метод вызывает исключение, хотя не должен этого делать. |
|
CA1300 |
Чтобы окно сообщения для языков, в которых используется порядок чтения справа налево, отображалось правильно, методу Show следует передать члены RightAlign и RtlReading перечисления MessageBoxOptions. |
|
CA1301 |
CA1301: не следует допускать повторяющихся сочетаний клавиш быстрого доступа |
Клавиша доступа, также называемая клавишей быстрого доступа, обеспечивает клавиатурный доступ к элементу управления с помощью клавиши ALT. Если несколько элементов управления имеют дублирующиеся клавиши доступа, поведение клавиши доступа определено нечетко. |
CA1302 |
CA1302: не следует жестко кодировать строки, зависящие от языка |
Перечисление System.Environment.SpecialFolder содержит члены, ссылающиеся на специальные системные папки. Расположение этих папок может различаться в разных ОС, пользователь может менять расположение этих папок, их имена могут быть локализованы. Метод Environment.GetFolderPath возвращает связанные с перечислением Environment.SpecialFolder расположения в локализованной форме, подходящей для использования на работающем в данный момент компьютере. |
CA1303 |
CA1303: не следует передавать литералы в виде локализованных параметров |
Внешне видимый метод передает строковый литерал в виде параметра конструктору или методу в библиотеке классов .NET Framework, и эта строка должна быть локализуемой. |
CA1304 |
Метод или конструктор вызывает член, имеющий перегрузку, которая принимает параметр System.Globalization.CultureInfo, вместо того чтобы вызвать перегрузку, принимающую параметр CultureInfo. Если объект CultureInfo или System.IFormatProvider не предоставляется, значение по умолчанию, поставляемое перегруженным членом, может не оказать ожидаемого воздействия во всех языковых стандартах. |
|
CA1305 |
Метод или конструктор вызывает один или несколько членов, имеющих перегрузки, которые принимают параметр System.IFormatProvider, вместо того чтобы вызвать перегрузку, принимающую параметр IFormatProvider. Если объект System.Globalization.CultureInfo или IFormatProvider не предоставляется, значение по умолчанию, поставляемое перегруженным членом, может не оказать ожидаемого воздействия во всех языковых стандартах. |
|
CA1306 |
Язык и региональные параметры определяют представление элементов данных, таких как формат чисел, обозначение денежных единиц и порядок сортировки. При создании объектов DataTable или DataSet следует явным образом указывать языковой стандарт. |
|
CA1307 |
В операции сравнения строк используется перегрузка метода, которая не задает параметр StringComparison. |
|
CA1308 |
Строки следует нормализовать в верхний регистр. Существует небольшая группа символов, которые после преобразования в нижний регистр не могут участвовать в круговом перемещении. |
|
CA1309 |
Операция сравнения строк, не являющаяся лингвистической, не задает для параметра StringComparison ни значения Ordinal, ни значения OrdinalIgnoreCase. После явного задания для параметра значения StringComparison.Ordinal или StringComparison.OrdinalIgnoreCase код часто становится более надежным и правильным, кроме того, увеличивается скорость его выполнения. |
|
CA1400 |
Открытый или защищенный метод, помеченный атрибутом System.Runtime.InteropServices.DllImportAttribute. Не удается найти неуправляемую библиотеку либо не удается сопоставить метод функции в библиотеке. |
|
CA1401 |
Открытый или защищенный метод в открытом типе имеет атрибут System.Runtime.InteropServices.DllImportAttribute (также реализуется в Visual Basic с помощью ключевого слова Declare). Такие методы не следует делать видимыми. |
|
CA1402 |
CA1402: не используйте перегрузки в интерфейсах, видимых в COM |
Когда перегруженные методы предоставляются клиентам COM, сохраняется имя только первой перегрузки метода. Последующие перегрузки переименовываются уникальным образом путем добавления к имени символа подчеркивания (_) и целого числа, соответствующего порядку объявления перегрузки. |
CA1403 |
Видимый для модели COM тип значения помечается атрибутом System.Runtime.InteropServices.StructLayoutAttribute, имеющим значение LayoutKind.Auto. Макеты этих типов могут меняться в различных версиях платформы .NET Framework, что может привести к нарушению работы клиентов COM, которые ожидают определенного макета. |
|
CA1404 |
Выполняется вызов метода 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 |
Типы, использующие сдвоенный интерфейс, позволяют клиентам выполнять привязку к определенному макету интерфейса. Все изменения в будущей версии макета типа и в базовых типах приведут к нарушению работы COM-клиентов, связанных с интерфейсом. По умолчанию, если атрибут ClassInterfaceAttribute не указан, используется только диспетчерский интерфейс. |
|
CA1409 |
Ссылочный тип, который специально помечен как видимый для модели 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 |
Тип помечен атрибутом System.Runtime.InteropServices.ComSourceInterfacesAttribute, однако по крайней мере один из указанных интерфейсов не помечен атрибутом System.Runtime.InteropServices.InterfaceTypeAttribute, значение которого равно ComInterfaceType.InterfaceIsIDispatch. |
|
CA1413 |
CA1413: избегайте использования не открытых полей в видимых типах значений COM |
Не являющиеся общедоступными поля экземпляров типов значений, отображаемых для модели COM, отображаются для COM-клиентов. Проверьте содержимое полей на наличие сведений, к которым не должен предоставляться доступ или которые могут оказать непреднамеренное воздействие на разработку или безопасность. |
CA1414 |
CA1414: пометьте логические аргументы P/Invoke с помощью атрибута MarshalAs |
Логический тип данных имеет несколько представлений в неуправляемом коде. |
CA1415 |
Это правило используется для поиска объявлений методов вызова операционной системы, предназначенных для функций Win32, имеющих указатель на параметр структуры OVERLAPPED, если соответствующий управляемый параметр не является указателем на структуру System.Threading.NativeOverlapped. |
|
CA1500 |
CA1500: имена переменных не должны совпадать с именами полей |
Метод экземпляра объявляет параметр или локальную переменную, чье имя совпадает с именем поля экземпляра объявляющего типа, что ведет к возникновению ошибок. |
CA1501 |
Тип расположен глубже четырех уровней в иерархии наследования. Глубокие иерархии вложенных типов трудно отслеживать, понимать и поддерживать. |
|
CA1502 |
Это правило измеряет число линейно независимых путей в методе, которое определяется числом и сложностью условных ветвей. |
|
CA1504 |
CA1504: проверьте имена полей, которые могут ввести в заблуждение |
Имя поля экземпляра начинается с "s_" или имя статического (Shared в Visual Basic) поля начинается с "m_". |
CA1505 |
Тип или метод имеет низкий индекс обслуживаемости. Низкий индекс удобства поддержки означает, что тип или метод, вероятно, трудно поддерживать, поэтому их следует переработать. |
|
CA1506 |
Данное правило измеряет соединение классов посредством подсчета количества уникальных ссылок на типы, содержащихся в типе или методе. |
|
CA1600 |
CA1600: не используйте приоритет процессов в состоянии ожидания |
Не задавайте для приоритета процесса значение Idle. Процессы с приоритетом System.Diagnostics.ProcessPriorityClass.Idle будут занимать ЦП, который иначе простаивал бы, и тем самым блокировать работу в режиме ожидания. |
CA1601 |
CA1601: не используйте таймеры, препятствующие изменению состояния электропитания |
Повышение частоты периодических действий приводит к дополнительной нагрузке на ЦП и препятствует работе таймеров энергосберегающих режимов, которые отключают монитор и жесткие диски. |
CA1700 |
CA1700: не следует называть значения перечислений именем "Reserved" |
В данном правиле предполагается, что член перечисления, имя которого содержит слово "reserved", не используется в настоящее время, а является местозаполнителем, который будет в дальнейшем переименован или удален. Переименование или удаление элемента — это критическое изменение. |
CA1701 |
CA1701: соблюдайте правильность регистра в составных словах строк ресурса |
Каждое слово в строке ресурса разделяется на лексемы на основе регистра (заглавных букв). Каждое непрерывное сочетание двух токенов проверяется библиотекой проверки орфографии Майкрософт. При совпадении слово создает нарушение правила. |
CA1702 |
CA1702: для сложных слов следует использовать правильный регистр |
Имя идентификатора состоит из нескольких слов, и по крайней мере одно из них является составным словом в неправильном регистре. |
CA1703 |
Строка ресурса содержит одно или несколько слов, не распознанных библиотекой системы проверки правописания Майкрософт. |
|
CA1704 |
Имя видимого для внешнего кода идентификатора содержит одно или несколько слов, не распознаваемых библиотекой средства проверки орфографии (Microsoft). |
|
CA1707 |
CA1707: идентификаторы не должны содержать знак подчеркивания |
В соответствии с соглашением имена идентификаторов не могут содержать знак подчеркивания (_). Это правило позволяет проверить пространства имен, типы, элементы и параметры. |
CA1708 |
CA1708: идентификаторы должны отличаться не только регистром |
Идентификаторы пространств имен, типов, членов и параметров не могут отличаться только регистром знаков, поскольку языки программирования, поддерживаемые средой CLR, не обязательно учитывают регистр знаков. |
CA1709 |
В соответствии с соглашением, в именах параметров используется смешанный регистр знаков, а в именах пространств имен, типов и членов — стиль языка Pascal. |
|
CA1710 |
По правилам имена типов, расширяющих определенные базовые типы или реализующих определенные интерфейсы, а также типов, являющихся производными от первых, имеют суффикс, связанный с базовым типом или интерфейсом. |
|
CA1711 |
В соответствии с соглашением об именовании, определенные зарезервированные суффиксы должны добавляться только к именам типов, которые расширяют некоторые базовые типы или реализуют определенные интерфейсы, а также производных от них типов. В именах других типов зарезервированные суффиксы использоваться не должны. |
|
CA1712 |
CA1712: не добавляйте имя типа перед перечисляемыми значениями |
Имена членов перечисления не должны содержать префиксов в виде имени типа, поскольку предполагается, что сведения о типе предоставляются средствами разработки. |
CA1713 |
CA1713: имена событий не должны содержать префикс "before" или "after" |
Имя события начинается с Before или After. Чтобы дать имена связанным событиям, возникающим в определенной последовательности, используйте настоящее или прошедшее время, чтобы обозначить положение события в последовательности действий. |
CA1714 |
CA1714: имена перечислений флагов должны быть во множественном числе |
Открытое перечисление содержит атрибут System.FlagsAttribute, и имя перечисления не заканчивается на "s". Имена типов, помеченных атрибутом FlagsAttribute, используются во множественном числе, поскольку данный атрибут указывает на возможность задания нескольких значений. |
CA1715 |
Имя доступного для внешнего кода интерфейса не начинается с заглавной буквы "I". Имя параметра универсального типа в доступном для внешнего кода типе или методе не начинается с заглавной буквы "Т". |
|
CA1716 |
CA1716: идентификаторы не должны совпадать с ключевыми словами |
Имя пространства имен или типа совпадает с ключевым словом, зарезервированным в языке программирования. Идентификаторы пространств имен и типов не должны совпадать с ключевыми словами, определенными в языках, поддерживаемых в среде CLR. |
CA1717 |
CA1717: только перечисления FlagsAttribute должны иметь имена во множественном числе |
Согласно правилам именования множественное число имени перечисления указывает, что одновременно можно задать несколько значений перечисления. |
CA1719 |
CA1719: имена параметров не должны совпадать с именами элементов |
Имя параметра должно передавать смысловое значение параметра, а имя члена — смысловое значение члена. Они могут совпадать лишь в очень редких случаях. Присвоение параметру имени содержащего его члена кажется неестественным и затрудняет использование библиотеки. |
CA1720 |
Имя параметра в доступном для внешнего кода элементе содержит имя типа данных, или имя доступного для внешнего кода элемента содержит языковое имя типа данных. |
|
CA1721 |
CA1721: имена свойств не должны совпадать с именами методов get |
Имя открытого или защищенного элемента начинается с Get и соответствует имени открытого или защищенного свойства и по другим параметрам. Методы и свойства " Get" должны иметь имена, позволяющие четко различать их функции. |
CA1722 |
В соответствии с соглашением об именовании, только некоторые элементы программирования могут иметь имена, которые начинаются с особого префикса. |
|
CA1724 |
CA1724. Имена типов не должны совпадать с именами пространства имен |
Имена типов не должны совпадать с именами пространств имен, определенными в библиотеке классов .NET Framework. Нарушение этого правила приводит к уменьшению функциональности библиотеки. |
CA1725 |
CA1725: имена параметров должны соответствовать базовому объявлению |
Согласованное именование параметров в иерархии переопределений увеличивает удобство использования переопределений метода. Если имя параметра в производном методе отличается от имени в базовом объявлении, может возникнуть путаница в определении того, чем является метод: переопределением базового метода или новой перегрузкой. |
CA1726 |
Имя видимого снаружи идентификатора включает термин, для которого существует другой предпочтительный термин. Кроме того, имя содержит термин Flag или Flags. |
|
CA1800 |
Повторяющиеся приведения снижают производительность, особенно если приведения выполняются в компактных операторах итераций. |
|
CA1801 |
Сигнатура метода включает параметр, не использующийся в основной части метода. |
|
CA1802 |
Поле объявляется статичным и доступным только для чтения (Shared и ReadOnly в Visual Basic) и инициализируется со значением, вычисляемым во время компиляции. Поскольку значение, присвоенное конечному полю, вычисляется во время компиляции, замените объявление полем const (Const в Visual Basic), чтобы значение вычислялось не во время выполнения, а во время компиляции. |
|
CA1804 |
Неиспользуемые локальные переменные и ненужные присвоения увеличивают размер сборки и снижают производительность. |
|
CA1806 |
Создается, но никогда не используется новый объект, либо вызывается метод, который создает и возвращает новую строку, и такая новая строка никогда не используется, либо метод COM или P/Invoke возвращает HRESULT или код ошибки, который никогда не используется. |
|
CA1809 |
CA1809: избегайте чрезмерного использования локальных переменных |
Обычно для оптимизации производительности рекомендуется хранить значение не в памяти, а в регистре процессора. Это называется регистрацией значения. Чтобы повысить вероятность регистрации всех локальных переменных, следует ограничить их количество 64. |
CA1810 |
CA1810: инициализируйте статические поля ссылочного типа встроенными средствами |
Если в типе объявляется явный статический конструктор, компилятор JIT добавляет проверку в каждый статический метод и конструктор экземпляров этого типа, чтобы убедиться, что статический конструктор уже вызывался ранее. Проверки статических конструкторов могут привести к снижению производительности. |
CA1811 |
Закрытый или внутренний член (член уровня сборки) не вызывается ни объектами сборки, ни средой CLR, ни делегатом. |
|
CA1812 |
Экземпляр типа уровня сборки не создается кодом в сборке. |
|
CA1813 |
В библиотеке классов .NET Framework предоставляются методы для извлечения пользовательских атрибутов. По умолчанию эти методы осуществляют поиск иерархии наследования атрибутов. Если запечатать атрибут, поиск в иерархии наследования выполняться не будет, в результате чего может повыситься производительность. |
|
CA1814 |
Массив массивов — это массив, элементы которого сами являются массивами. Массивы, которые составляют элементы, могут иметь различные размеры, что позволяет экономить пространство для некоторых наборов данных. |
|
CA1815 |
CA1815: следует переопределять равенства и равенства операторов в типах значений |
В унаследованной реализации Equals для типов значений используется библиотека отражения и сравнивается содержимое всех полей. Отражение является процессом, требующим с точки зрения вычислений больших затрат, и сравнение каждого поля на равенство может быть лишним. Если предполагается, что пользователи будут сравнивать, сортировать экземпляры или использовать их в качестве ключей хэш-таблиц, тип значения должен реализовывать Equals. |
CA1816 |
CA1816: вызов GC.SuppressFinalize должен осуществляться правильно |
Метод, являющийся реализацией Dispose, не вызывает GC.SuppressFinalize, либо метод, не являющийся реализацией Dispose, вызывает GC.SuppressFinalize, либо метод вызывает GC.SuppressFinalize и передает что-либо другое (Me в Visual Basic). |
CA1819 |
Массивы, возвращаемые свойствами, не защищены от записи, даже если свойство доступно только для чтения. Чтобы защитить массив от изменений, свойство должно возвращать копию массива. Как правило, пользователи не понимают требований к производительности при вызове такого свойства. |
|
CA1820 |
CA1820: проверьте наличие пустых строк путем проверки длины строки |
Сравнивать строки с использованием свойства String.Length или метода String.IsNullOrEmpty значительно быстрее, чем с помощью Equals. |
CA1821 |
Если возможно, старайтесь не использовать финализаторы, поскольку из-за отслеживания жизненного срока объектов снижается производительность программы. Пустой метод завершения создает дополнительную нагрузку на систему, не обеспечивая никаких преимуществ. |
|
CA1822 |
Члены, не обращающиеся к данным экземпляра и не вызывающие методы экземпляра, можно пометить как статические (Shared в Visual Basic). Если пометить методы как статические, компилятор предоставит этим членам невиртуальные места вызова. Это обеспечивает значительное повышение производительности при работе с кодом, для которого важна высокая производительность системы. |
|
CA1823 |
Обнаружены закрытые поля, доступ к которым, судя по всему, не предоставляется в сборке. |
|
CA1824 |
CA1824: следует помечать сборки атрибутом NeutralResourcesLanguageAttribute |
Атрибут NeutralResourcesLanguage сообщает ResourceManager о языке, используемом для отображения независящих от языка и региональных параметров ресурсов для сборки. При этом повышается эффективность поиска первого загружаемого ресурса и может сократиться рабочее множество. |
CA1900 |
Это правило проверяет правильность выравнивания структур, объявленных с явной разметкой, при маршалировании в неуправляемый код на 64-разрядных операционных системах. |
|
CA1901 |
Данное правило вычисляет размер каждого параметра и возвращаемого значения вызова P/Invoke и проверяет правильность размера параметра при маршалировании в неуправляемый код на 32-разрядных и 64-разрядных операционных системах. |
|
CA1903 |
CA1903: использовать API-интерфейс только из целевой исполняющей среды |
Член или тип использует член или тип, который был впервые представлен в пакете обновления, не включенном в целевую среду проекта. |
CA2000 |
CA2000: удалите объекты до того, как будет потеряна область действия |
Необходимо явно удалить объект до того, как все ссылки на него окажутся вне области действия, так как может произойти исключительное событие, которое воспрепятствует выполнению метода завершения объекта. |
CA2001 |
Член вызывает потенциально опасный или проблемный метод. |
|
CA2002 |
К объекту со слабой идентификацией может быть получен прямой доступ через границы домена приложения. Поток пытается получить блокировку объекта со слабой идентификацией, который может быть заблокирован вторым потоком в другом домене приложения, имеющим блокировку того же объекта. |
|
CA2003 |
Управляемый поток обрабатывается как поток Win32. |
|
CA2004 |
При переходе к использованию класса 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 |
Метод использует принудительную безопасность и может обеспечить создание разрешения с помощью сведений о состоянии или возвращаемых значений, которые могут измениться в период активности требования. Поэтому по возможности следует использовать декларативную безопасность. |
|
CA2104 |
CA2104: не объявляйте изменяемые ссылочные типы, доступные только для чтения |
Видимый извне тип содержит видимое извне и доступное только для чтение поле, являющееся изменяемым ссылочным типом. Изменяемый тип — это тип, экземпляр которого может быть изменен. |
CA2105 |
CA2105: поля массивов не должны быть доступны только для чтения |
При применении модификатора "только для чтения" (ReadOnly в Visual Basic) к полю, содержащему массив, это поле нельзя изменить, связав его с другим массивом. Однако элементы массива, хранящегося в доступном только для чтения поле, можно будет изменить. |
CA2106 |
Метод подтверждает разрешения без выполнения проверок безопасности для вызывающего объекта. Подтверждение разрешений безопасности без выполнения проверок безопасности может привести к возникновению в коде уязвимости системы безопасности, которой могут воспользоваться злоумышленники. |
|
CA2107 |
Метод PermitOnly и действия безопасности CodeAccessPermission.Deny следует использовать только в том случае, когда разработчик хорошо разбирается в работе системы безопасности .NET Framework. Код, который использует эти действия безопасности, должен быть тщательно проанализирован на предмет безопасности. |
|
CA2108 |
CA2108: проверьте объявляемые параметры безопасности типов значений |
Открытый или защищенный тип значения защищен средствами доступа к данным или требованиями ссылки. |
CA2109 |
Обнаружен открытый или защищенный метод обработки событий. Методы обработки событий следует раскрывать только в тех случаях, когда это совершенно необходимо. |
|
CA2111 |
Указатель не является закрытым, внутренним или доступным только для чтения. Вредоносный код может изменить значение указателя, что потенциально приведет к предоставлению доступа к произвольным областям памяти или сбоям приложения или системы. |
|
CA2112 |
Открытый или защищенный тип содержит открытые поля и защищен требованиями ссылки. Если код имеет доступ к экземпляру типа, защищенного запросом компоновки, то для получения доступа к полям типа коду не требуется удовлетворять запросу компоновки. |
|
CA2114 |
Метод не должен обладать декларативной безопасностью для одного и того же действия, как на уровне метода, так и на уровне типа. |
|
CA2115 |
CA2115: вызывайте GC.KeepAlive при использовании собственных ресурсов |
Данное правило обнаруживает ошибки, которые могут возникать из-за завершения неуправляемых ресурсов, по-прежнему используемых в машинном коде. |
CA2116 |
Если в полностью доверенной сборке присутствует атрибут APTCA (AllowPartiallyTrustedCallersAttribute) и она выполняет код в другой сборке, для которой не разрешены частично доверенные вызовы, возможно возникновение уязвимости безопасности. |
|
CA2117 |
CA2117: APTCA-типы должны расширять только базовые APTCA-типы |
Если сборка с полным доверием помечена атрибутом APTCA и тип в сборке наследует от типа, который не разрешает вызовы с неполным доверием, возможно возникновение уязвимости для эксплойта. |
CA2118 |
CA2118: обзор использования SuppressUnmanagedCodeSecurityAttribute |
Атрибут SuppressUnmanagedCodeSecurityAttribute изменяет поведение системы безопасности, определенное по умолчанию, для элементов, выполняющих неуправляемый код за счет COM-взаимодействия или вызова операционной системы. Этот атрибут служит в основном для повышения производительности; однако, прирост производительности сопряжен со значительными рисками безопасности. |
CA2119 |
CA2119: запечатайте методы, соответствующие частным интерфейсам |
Наследуемый открытый тип предоставляет реализацию переопределяемого метода внутреннего (Friend в Visual Basic) интерфейса. Для устранения нарушения данного правила следует исключить возможность переопределения метода за пределами сборки. |
CA2120 |
Для этого типа предусмотрен конструктор, который принимает объекты System.Runtime.Serialization.SerializationInfo и System.Runtime.Serialization.StreamingContext (сигнатура конструктора сериализации). Этот конструктор не защищен проверкой безопасности, однако один или несколько обычных конструкторов этого типа защищены. |
|
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 |
Типы и члены с атрибутом 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 |
Из-за этого становится трудно обнаружить и отладить изначальную ошибку. |
|
CA2202 |
Реализация метода содержит пути кода, которые могли стать причиной многократного вызова метода System.IDisposable.Dispose или эквивалентного метода Dispose (например, метода Close() для некоторых типов) для одного и того же объекта. |
|
CA2204 |
Литеральная строка в теле метода содержит одно или несколько слов, не распознаваемых библиотекой системы проверки орфографии Майкрософт. |
|
CA2205 |
Определен метод вызова операционной системы, при этом в библиотеке классов .NET Framework существует метод с эквивалентной функциональностью. |
|
CA2207 |
CA2207: инициализируйте статические поля типа значений встроенными средствами |
Тип значения объявляет явный статический конструктор. Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор. |
CA2208 |
CA2208: правильно создавайте экземпляры аргументов исключений |
Вызывается конструктор по умолчанию (без параметров), принадлежащий к типу исключения ArgumentException или унаследованный от него, или неправильный аргумент строки передается параметризованному конструктору, принадлежащему к типу исключения ArgumentException или унаследованному от него. |
CA2210 |
Строгое имя защищает клиентов от случайной загрузки сборки, которая была подменена. Сборки без строгих имен следует развертывать лишь в крайне небольшом числе случаев. При обмене или распространении сборок без правильной подписи сборки могут быть подменены, среда CLR может не загрузить сборку или пользователь может быть вынужден отключить проверку на своем компьютере. |
|
CA2211 |
Для статических полей, которые не являются константными и доступными только для чтения, невозможно обеспечить потокобезопасность. Доступ к подобным полям должен тщательно контролироваться, и для синхронизации доступа к такому объекту класса требуются дополнительные методы программирования. |
|
CA2212 |
CA2212: не следует помечать обслуживаемые компоненты атрибутом WebMethod |
Метод в типе, унаследованном от System.EnterpriseServices.ServicedComponent, помечен атрибутом System.Web.Services.WebMethodAttribute. Так как атрибут WebMethodAttribute и метод ServicedComponent имеют разное поведение и предъявляют конфликтующие требования к контексту и потоку транзакций, в некоторых сценариях поведение метода будет неправильным. |
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 |
Если исключение создается в предложении finally или fault, новое исключение скрывает активное исключение. Если исключение создается в предложении filter, среда выполнения перехватывает исключение без оповещения. Из-за этого становится трудно обнаружить и отладить изначальную ошибку. |
|
CA2220 |
CA2220: методы завершения должны вызывать метод завершения базового класса |
Финализация должна распространятся посредством иерархии наследования. Для этого типы должны вызывать свой метод Finalize базового класса из собственного метода Finalize. |
CA2221 |
В методах завершения должен использоваться модификатор доступа из семейства. |
|
CA2222 |
Не следует изменять модификатор доступа для унаследованных членов. Если сделать унаследованный член закрытым, то доступ вызывающих объектов к реализации метода базового класса все равно не будет запрещен. |
|
CA2223 |
CA2223: члены должны различаться не только возвращаемым типом |
Среда CLR позволяет использовать возвращаемые типы для различения совпадающих в остальном членов, однако эта функция не входит в спецификацию CLS и поддерживается не всеми языками программирования .NET. |
CA2224 |
CA2224: переопределяйте равенство при перегрузке оператора равенства |
Открытый тип реализует оператор равенства, но не переопределяет Object.Equals. |
CA2225 |
CA2225: для перезагрузок оператора существуют дополнения с именами |
Обнаружена перегрузка оператора, однако не найден ожидаемый именованный альтернативный метод. Именованный альтернативный член предоставляет те же функции, что и основной оператор, и его могут использовать разработчики, которые программируют на языках, не поддерживающих перегрузку операторов. |
CA2226 |
Тип реализует оператор равенства или неравенства, но не реализует противоположный оператор. |
|
CA2227 |
CA2227: свойства коллекции должны иметь параметр "только для чтения" |
Свойство коллекции, допускающее запись, позволяет пользователю заменять одну коллекцию другой. Свойство только для чтения предотвращает замену коллекции, но по-прежнему допускает установку, настройку отдельных членов. |
CA2228 |
Файлы ресурсов, созданные с помощью предварительных версий .NET Framework, могут не работать в поддерживаемых версиях платформы .NET Framework. |
|
CA2229 |
Чтобы устранить нарушение этого правила, реализуйте конструктор сериализации. Для запечатанного класса конструктор должен быть закрытым, а в иных случаях — защищенным. |
|
CA2230 |
Открытый или защищенный тип содержит открытый или защищенный метод, который использует соглашение о вызовах VarArgs вместо ключевого слова params. |
|
CA2231 |
CA2231: перегружать равенство операторов следует при перегрузке ValueType.Equals |
Тип значения переопределяет Object.Equals, но не реализует оператор равенства. |
CA2232 |
Атрибут STAThreadAttribute указывает, что потоковой моделью COM для приложения является однопотоковое подразделение. Данный атрибут должен находиться в точке входа любого приложения, использующего Windows Forms; если он отсутствует, компоненты Windows могут работать неправильно. |
|
CA2233 |
Не следует выполнять арифметические операции без предварительной проверки операндов. Это гарантирует, что результат операции находится в диапазоне возможных значений для используемых типов данных. |
|
CA2234 |
Вызывается метод, имеющий параметр строки, имя которого содержит uri, URI, urn, URN, url или URL. Объявляющий тип метода содержит соответствующую перегрузку метода, которая имеет параметр System.Uri. |
|
CA2235 |
Экземпляр поля несериализуемого типа объявлен в сериализуемом типе. |
|
CA2236 |
CA2236: вызывайте методы базового класса для типов ISerializable |
Чтобы устранить нарушение этого правила, вызовите метод базового типа GetObjectData или конструктор сериализации из соответствующего метода производного типа или конструктора. |
CA2237 |
CA2237: пометьте типы ISerializable атрибутом SerializableAttribute |
Чтобы среда CLR распознавала тип как сериализуемый, он должен быть помечен атрибутом SerializableAttribute, даже если тип использует пользовательскую процедуру сериализации посредством реализации интерфейса ISerializable. |
CA2238 |
Метод, обрабатывающий событие сериализации, не имеет правильной сигнатуры, возвращаемого типа или отображения. |
|
CA2239 |
CA2239: предоставляйте методы десериализации для необязательных полей |
Тип имеет поле, помеченное атрибутом System.Runtime.Serialization.OptionalFieldAttribute, и не предоставляет методы обработки событий десериализации. |
CA2240 |
Чтобы устранить нарушение данного правила, сделайте метод GetObjectData доступным для внешнего кода и переопределяемым и убедитесь, что все поля экземпляра включены в процесс сериализации или явно помечены атрибутом NonSerializedAttribute. |
|
CA2241 |
CA2241: предоставьте правильные аргументы методам форматирования |
Аргумент формата, переданный методу System.String.Format, не содержит элемент форматирования, соответствующий каждому аргументу объекта, или наоборот. |
CA2242 |
Это выражение проверяет значение на соответствие Single.Nan или Double.Nan. Используйте Single.IsNan(Single) или Double.IsNan(Double) для проверки значения. |
|
CA2243 |
CA2243: синтаксический анализ строковых литералов атрибута должен осуществляться правильно |
Не удается правильно выполнить синтаксический анализ параметра строкового литерала атрибута для URL-адреса, идентификатора GUID или версии. |