Conjunto de reglas Reglas de corrección básicas para código administrado
El conjunto de Reglas de corrección básica se centra en los errores lógicos y los errores comunes en el uso de las API del marco de trabajo.Este conjunto incluye las reglas del conjunto de reglas mínimas recomendadas.Para obtener más información, vea Conjunto de reglas Reglas recomendadas administradas para código administrado. Debe incluir este conjunto de reglas si desea expandir la lista de advertencias que presentan las reglas mínimas recomendadas.
En la tabla siguiente se describen todas las reglas del conjunto Reglas de corrección básica de Microsoft.
Regla |
Descripción |
---|---|
Los tipos que poseen campos descartables deben ser descartables |
|
Declarar los controladores de eventos correctamente |
|
Marcar los ensamblados con AssemblyVersionAttribute |
|
Los tipos secundarios deben poder llamar a los métodos de interfaz |
|
Los tipos que poseen recursos nativos deben ser descartables |
|
Mover P/Invokes a la clase NativeMethods |
|
No ocultar métodos de clases base |
|
Implementar IDisposable correctamente |
|
No producir excepciones en ubicaciones inesperadas |
|
Evitar aceleradores duplicados |
|
Deben existir puntos de entrada P/Invoke |
|
Los elementos P/Invoke no deben estar visibles |
|
Los tipos de diseño automático no deben estar visibles para COM |
|
Llamar a GetLastError inmediatamente después de P/Invoke |
|
Los tipos base de los tipos visibles de COM deben estar visibles para COM |
|
Los métodos de registro COM se deben adjuntar |
|
Declarar elementos P/Invoke correctamente |
|
Quitar los finalizadores vacíos |
|
Los campos de tipo de valor deben ser portables |
|
Las declaraciones P/Invoke deben ser portables |
|
No bloquear objetos con identidad débil |
|
Revisar las consultas SQL en busca de vulnerabilidades de seguridad |
|
Especificar cálculos de referencias para argumentos de cadena P/Invoke |
|
Revisar la seguridad declarativa en los tipos de valor |
|
Los punteros no deben estar visibles |
|
Los tipos seguros no deben exponer campos |
|
La seguridad del método debe ser un supraconjunto del tipo |
|
Los métodos APTCA deben llamar sólo a métodos APTCA |
|
Los tipos APTCA sólo amplían tipos base APTCA |
|
No exponer indirectamente métodos con peticiones de vínculos |
|
Las peticiones de vínculos de reemplazo deben ser idénticas a la base |
|
Incluir cláusulas Finally vulnerables en un bloque Try externo |
|
Las peticiones de vínculos de tipos requieren peticiones de herencias |
|
Los tipos críticos para la seguridad no pueden participar en la equivalencia de tipos |
|
Los constructores predeterminados deben ser al menos tan críticos para la seguridad como los constructores predeterminados de tipo base. |
|
Los delegados deben enlazarse a métodos con una transparencia coherente |
|
Los métodos deben mantener una transparencia coherente cuando reemplazan métodos base |
|
Los métodos transparentes deben contener sólo IL que se pueda comprobar |
|
Los métodos transparentes no deben llamar a métodos con el atributo SuppressUnmanagedCodeSecurity |
|
El código transparente no debe hacer referencia a elementos críticos para la seguridad |
|
Los métodos transparentes no deben satisfacer LinkDemands |
|
Los tipos deben ser al menos tan críticos para la seguridad como sus interfaces y tipos base. |
|
Los métodos transparentes no pueden usar aserciones de seguridad |
|
Los métodos transparentes no deben llamar a código nativo |
|
Iniciar de nuevo para preservar los detalles de la pila |
|
No aplicar Dispose a los objetos varias veces |
|
Inicializar campos estáticos de tipo de valor insertados |
|
No marcar los componentes con servicio como WebMethod |
|
Los tipos descartables deben ser descartados |
|
No llamar a métodos reemplazables en constructores |
|
Los tipos descartables deben declarar el finalizador |
|
Los finalizadores deben llamar al finalizador de la clase base |
|
Implementar constructores de serialización |
|
Sobrecargar el operador de igualdad al reemplazar ValueType.Equals |
|
Marcar puntos de entrada de Windows Forms con STAThread |
|
Marcar todos los campos no serializables |
|
Llamar a métodos de clase base en tipos ISerializable |
|
Marcar los tipos ISerializable con SerializableAttribute |
|
Implementar métodos de serialización correctamente |
|
Implementar ISerializable correctamente |
|
Proporcionar argumentos correctos a los métodos de formato |
|
Prueba para NaN correcta |
|
Las enumeraciones deben tener un valor igual a cero |
|
El operador de sobrecarga equivale a la suma y la resta de sobrecarga |
|
No pasar literales como parámetros localizados |
|
Normalizar las cadenas en mayúsculas |
|
No omitir resultados del método |
|
Llamar a GC.SuppressFinalize correctamente |
|
Las propiedades no deben devolver matrices |
|
Comprobar si las cadenas están vacías mediante la longitud de cadena |
|
Usar solo API de la versión de .NET Framework de destino |
|
Quitar las llamadas a GC.KeepAlive |
|
Utilizar SafeHandle para encapsular recursos nativos |
|
Detectar excepciones que no son CLSCompliant en los controladores generales |
|
No declarar tipos de referencias mutables de sólo lectura |
|
Los campos de matrices no deben ser de sólo lectura |
|
Asegurar aserciones |
|
Llamar a GC.KeepAlive cuando se utilicen recursos nativos |
|
Sellar los métodos que cumplan las interfaces privadas |
|
Proteger los constructores de serializaciones |
|
Los constructores estáticos deben ser privados |
|
Las constantes críticas para la seguridad deben ser transparentes |
|
Utilizar equivalentes administrados de la API Win32 |
|
Los métodos Dispose deben llamar a Dispose de la clase base |
|
Los finalizadores deben protegerse |
|
No reducir la visibilidad del miembro heredado |
|
Los miembros deben diferenciarse por algo más que por un tipo de valor devuelto |
|
Reemplazar el operador equals al sobrecargar operadores de igualdad |
|
Los operadores deben tener sobrecargas simétricas |
|
Las propiedades de la colección deben ser de solo lectura |
|
Proporcionar métodos de deserialización para campos opcionales |