Правила надежности

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

Правило Description
CA2000: удалите объекты до того, как будет потеряна область действия Необходимо явно удалить объект до того, как все ссылки на него окажутся вне области действия, так как может произойти исключительное событие, которое воспрепятствует выполнению метода завершения объекта.
CA2002: не блокировать объекты со слабой идентификацией К объекту со слабой идентификацией может быть получен прямой доступ через границы домена приложения. Поток пытается получить блокировку объекта со слабой идентификацией, который может быть заблокирован вторым потоком в другом домене приложения, имеющим блокировку того же объекта.
CA2007: не ожидайте непосредственно задачи Асинхронный метод ожидает класс Task напрямую.
CA2008: не создавайте задачи без передачи TaskScheduler Операция создания или продолжения задачи использует перегрузку метода, в которой не указан параметр TaskScheduler.
CA2009: не вызывайте ToImmutableCollection в неизменяемом значенииCollection Метод ToImmutable был без необходимости вызван для неизменяемой коллекции из пространства имен System.Collections.Immutable.
CA2011: не назначайте свойство в своем наборе Свойству было случайно присвоено значение в его методе доступа set.
CA2012: правильно используйте ValueTasks Экземпляры ValueTask, возвращаемые из вызовов элементов, предназначены для непосредственного ожидания. Попытки использовать ValueTask несколько раз или для прямого доступа к результату до его завершения могут привести к возникновению исключения или повреждения. Игнорирование ValueTask, скорее всего, указывает на функциональную ошибку и может привести к снижению производительности.
CA2013: не используйте ReferenceEquals с типами значений Если при сравнении значений с помощью System.Object.ReferenceEquals objA и objB являются типами значений, то перед передачей они упаковываются в метод ReferenceEquals. Это означает, что даже если и objA, и objB представляют один и тот же экземпляр типа значения, метод ReferenceEquals все равно возвращает значение false.
CA2014: не используйте stackalloc в циклах. Пространство стека, выделенное stackalloc, освобождается только в конце вызова текущего метода. Использование его в цикле может привести к неограниченному росту стека и появлению условий переполнения стека.
CA2015: не определяйте методы завершения для типов, производных от MemoryManager<T> Добавление метода завершения к типу, производному от MemoryManager<T>, может привести к освобождению памяти, пока она еще используется Span<T>.
CA2016: переадресация параметра CancellationToken в методы, которые принимают один Перенаправьте параметр CancellationToken в методы, чтобы обеспечить правильное распространение уведомлений об отмене операции, или явно передайте CancellationToken.None, чтобы указать, что маркер не распространяется намеренно.
CA2017: несоответствие счетчика параметров Количество параметров, предоставленных в шаблоне сообщения ведения журнала, не соответствует числу именованных заполнителей.
CA2018: аргумент count в Buffer.BlockCopy должен задавать число байт копирования При использовании Buffer.BlockCopy аргумент count указывает число копируемых байт. Использовать Array.Length для аргумента count следует только с массивами с размером элементов ровно один байт. Массивы с однобайтовым размером элементов: byte, sbyte и bool.
CA2019: ThreadStatic поля не должны использовать встроенную инициализацию Поле, помеченное аннотацией, ThreadStaticAttribute инициализируется встроенным или явным образом в static конструкторе (Shared в Visual Basic).
CA2020: предотвращение изменения поведения, вызванного встроенными операторами IntPtr/UIntPtr Некоторые встроенные операторы, добавленные в .NET 7, ведут себя не так, как определяемые пользователем операторы в .NET 6 и более ранних версиях. Некоторые операторы, которые использовались для вызова не проверка проверка контекста при переполнении, больше не вызываются, если не упакованы в проверка контексте. Некоторые операторы, которые ранее не вызвали проверка контексте, теперь вызываются, если только не упакованы в не проверка контексте.
CA2021: не вызывайте Enumerable.Cast<T или Enumerable.OfType<T>> с несовместимыми типами Вызов Enumerable.Cast<TResult>(IEnumerable) или Enumerable.OfType<TResult>(IEnumerable) задает параметр типа, несовместимый с типом входной коллекции.