Reglas de confiabilidad

Las reglas de confiabilidad admiten la confiabilidad de bibliotecas y aplicaciones, como el uso correcto de la memoria y los subprocesos. Entre las reglas de confiabilidad se incluyen las siguientes:

Regla Descripción
CA2000: Desechar objetos antes de perder el ámbito Dado que podría producirse un evento excepcional que evitaría que el finalizador de un objeto se ejecutase, el objeto debe estar disponible en su lugar antes de que todas las referencias a él estén fuera del ámbito.
CA2002: No bloquear objetos con identidad débil Se dice que un objeto tiene una identidad débil cuando se puede tener acceso directamente a través de los límites del dominio de aplicación. Un subproceso que intenta obtener un bloqueo en un objeto que tiene identidad débil se puede bloquear con un segundo subproceso en un dominio de aplicación diferente que tenga bloqueado el mismo objeto.
CA2007: No esperar una tarea directamente Un método asincrónico espera a un objeto Task directamente.
CA2008: No crear tareas sin pasar un elemento TaskScheduler Una operación de creación o continuación de tareas utiliza una sobrecarga de método que no especifica un parámetro TaskScheduler.
CA2009: No llame a ToImmutableCollection en un valor ImmutableCollection Se ha llamado innecesariamente al método ToImmutable en una colección inmutable desde el espacio de nombres System.Collections.Immutable.
CA2011: No asignar la propiedad dentro de su establecedor Se ha asignado accidentalmente un valor a una propiedad dentro de su propio descriptor de acceso set.
CA2012: Usar ValueTasks correctamente Los objetos ValueTask devueltos de las invocaciones de miembro están diseñados para que se espere por ellos de forma directa. Los intentos de consumir un objeto ValueTask varias veces o acceder directamente al resultado de uno antes de saber que se ha completado pueden iniciar una excepción o producir daños. Probablemente la omisión de ese tipo de objeto ValueTask indique que se trata de un error funcional y puede degradar el rendimiento.
CA2013: No usar ReferenceEquals con tipos de valor Al comparar valores mediante System.Object.ReferenceEquals, si objA y objB son tipos de valor, se les aplica la conversión boxing antes de que se pasen al método ReferenceEquals. Esto significa que, aunque objA y objB representen la misma instancia de un tipo de valor, el método ReferenceEquals devuelve false.
CA2014: No usar stackalloc en bucles. El espacio de pila asignado por stackalloc solo se libera al final de la invocación del método actual. Su uso en un bucle puede dar lugar a un crecimiento de pila sin enlazar y a posibles condiciones de desbordamiento de pila.
CA2015: No definir finalizadores para los tipos derivados de MemoryManager <T> La adición de un finalizador a un tipo derivado de MemoryManager<T> puede permitir que se libere memoria mientras sigue en uso en un elemento Span<T>.
CA2016: Reenviar el parámetro CancellationToken a los métodos que lo usan Reenvíe el parámetro CancellationToken a los métodos en los que se use uno para garantizar que las notificaciones de cancelación de operaciones se propagan correctamente, o bien pase CancellationToken.None de forma explícita para indicar que no se propagará el token intencionalmente.
CA2017: Error de coincidencia del recuento de parámetros El número de parámetros proporcionados en la plantilla de mensaje de registro no coincide con el número de marcadores de posición con nombre.
CA2018: el argumento count para Buffer.BlockCopy debería especificar el número de bytes que deben copiarse Al usar Buffer.BlockCopy, el argumento count especifica el número de bytes que deben copiarse. Solo debería usar Array.Length para el argumento count en matrices cuyos elementos tendrán exactamente un tamaño de un byte. Las matrices byte, sbyte y bool tienen elementos con un tamaño de un byte.
CA2019: los campos ThreadStatic no deben usar la inicialización insertada Un campo anotado con ThreadStaticAttribute se inicializa insertado o explícitamente en un constructor static (Shared en Visual Basic).
CA2020: Evitar el cambio de comportamiento causado por operadores integrados de IntPtr/UIntPtr Algunos operadores integrados agregados en .NET 7 se comportan de forma diferente a los operadores definidos por el usuario en .NET 6 y versiones anteriores. Algunos operadores que solían iniciarse en un contexto no comprobado mientras se desbordaban ya no se inician a menos que estén encapsulados en un contexto comprobado. Algunos operadores que antes no se iniciaban en un contexto comprobado ahora se inician a menos que estén encapsulados en un contexto no comprobado.
CA2021: No llamar a Enumerable.Cast<T> o Enumerable.OfType<T> con tipos incompatibles Una llamada a Enumerable.Cast<TResult>(IEnumerable) o Enumerable.OfType<TResult>(IEnumerable) especifica un parámetro de tipo incompatible con el tipo de la colección de entrada.