Conjunto de reglas de análisis de código Reglas de corrección extendidas de Microsoft
El conjunto Reglas de corrección extendidas de Microsoft maximiza los errores de uso del marco de trabajo y de lógica que notifica el análisis de código. Se hace hincapié en escenarios concretos como la interoperabilidad COM y las aplicaciones móviles. Considere incluir este conjunto de reglas si alguno de estos escenarios es aplicable a su proyecto o para buscar problemas adicionales del proyecto.
El conjunto Reglas de corrección extendidas de Microsoft incluye las reglas del conjunto Reglas de corrección básica de Microsoft. Este conjunto incluye las reglas del conjunto Reglas mínimas recomendadas de Microsoft. Para obtener más información, vea Conjunto de reglas de análisis de código Reglas de corrección básica de Microsofty Conjunto de reglas de análisis de código Reglas mínimas recomendadas de Microsoft.
En la tabla siguiente se describen todas las reglas del conjunto Reglas de corrección extendidas de Microsoft.
Regla |
Descripción |
---|---|
El error al proporcionar el conjunto completo de constructores puede dificultar el control correcto de las excepciones. |
|
Si un método toma una representación de cadena de un identificador URI, debe proporcionarse la sobrecarga correspondiente que toma una instancia de la clase URI, que proporciona estos servicios de forma segura. |
|
La regla supone que el método devuelve un identificador uniforme de recursos (URI). Las representaciones de cadena de identificadores URI tienen tendencia a analizar y codificar errores, por lo que pueden crear puntos vulnerables en la seguridad. La clase System.Uri proporciona estos servicios de una manera segura. |
|
La regla supone que la propiedad representa un Identificador uniforme de recursos (URI). Las representaciones de cadena de identificadores URI tienen tendencia a analizar y codificar errores, por lo que pueden crear puntos vulnerables en la seguridad. La clase System.Uri proporciona estos servicios de una manera segura. |
|
CA1057: Las sobrecargas URI de cadena llaman a sobrecargas System.Uri |
Un tipo declara sobrecargas de método que solamente se distinguen por la sustitución de un parámetro de cadena por un parámetro System.Uri. La sobrecarga que toma el parámetro de cadena no llama a la sobrecarga que toma el parámetro URI. |
Cuando se exponen métodos sobrecargados a los clientes COM, sólo la primera sobrecarga de método conserva su nombre. Las sobrecargas subsiguientes reciben un nombre único resultante de anexar al nombre un carácter de subrayado (_) y un entero correspondiente al orden de declaración de la sobrecarga. |
|
Los clientes COM de Visual Basic 6 no pueden tener acceso a los enteros de 64 bits. |
|
COM no es compatible con métodos static. |
|
Los tipos que utilizan una interfaz dual permiten a los clientes enlazarse a un diseño de interfaz concreto. Cualquier cambio que se introduzca en una versión futura en el diseño del tipo o en cualquier tipo base provocará un error en los clientes COM que están enlazados a la interfaz. De forma predeterminada, si no se especifica el atributo ClassInterfaceAttribute, se utiliza una interfaz solo de envío. |
|
Un tipo de referencia marcado específicamente como visible para COM contiene un constructor parametrizado público pero no contiene un constructor (sin parámetros) predeterminado público. Un tipo sin un constructor predeterminado público no se puede crear mediante clientes COM. |
|
Un método marcado con el atributo System.Runtime.InteropServices.ComRegisterFunctionAttribute o el atributo System.Runtime.InteropServices.ComUnregisterFunctionAttribute es visible externamente. |
|
Un tipo se marca con el atributo System.Runtime.InteropServices.ComSourceInterfacesAttribute y por lo menos una de las interfaces especificadas no se marca con el atributo System.Runtime.InteropServices.InterfaceTypeAttribute establecido en ComInterfaceType.InterfaceIsIDispatch. |
|
CA1413: Evite campos no públicos en tipos de valor visibles para COM |
Los campos de instancia no públicos de tipos de valor visibles para COM están visibles para los clientes COM. Revise el contenido de los campos para obtener información que no deba exponerse o que tendrá un impacto sobre la seguridad o un diseño no deseado. |
CA1414: Marque los argumentos P/Invoke booleanos con MarshalAs |
El tipo de datos booleano tiene varias representaciones en el código no administrado. |
No establezca la prioridad de proceso en Idle. Los procesos con System.Diagnostics.ProcessPriorityClass.Idle ocupan la CPU cuando, de otro modo, estaría inactiva y, por consiguiente, bloquean el estado de espera. |
|
CA1601: No utilizar temporizadores que impidan los cambios de estado de energía |
Una actividad periódica más frecuente hará que la CPU no esté disponible e interferirá con los temporizadores de inactividad para ahorro de energía que apagan el monitor y los discos duros. |
Siempre que pueda, evite los finalizadores debido a la sobrecarga de rendimiento adicional necesaria para el seguimiento de la duración del objeto. Un finalizador vacío produce una sobrecarga adicional sin ningún beneficio. |
|
CA1824: Marque los ensamblados con NeutralResourcesLanguageAttribute |
El atributo NeutralResourcesLanguage informa a ResourceManager del idioma utilizado para mostrar los recursos de la referencia cultural neutral de un ensamblado. Esto mejora el rendimiento de la búsqueda del primer recurso que se carga y puede reducir el espacio de trabajo. |
Un miembro llama a un método potencialmente peligroso o problemático. |
|
Un subproceso administrado se trata como un subproceso de Win32. |
|
Una cadena literal en el cuerpo de un método contiene una o varias palabras que la biblioteca de correctores ortográficos de Microsoft no reconoce. |
|
Los campos estáticos que no son constantes ni de sólo lectura no son seguros para subprocesos. Obtener acceso a este tipo de campo se debe controlar cuidadosamente y requiere técnicas de programación avanzadas para sincronizar el acceso al objeto de clase. |
|
Una enumeración visible externamente está marcada con FlagsAttribute y tiene uno o varios valores que no son potencias de dos o una combinación de los otros valores definidos en la enumeración. |
|
CA2218: Reemplazar el método GetHashCode al reemplazar el método Equals |
GetHashCode devuelve un valor basado en la instancia actual que es adecuado para los algoritmos hash y las estructuras de datos como una tabla hash. Dos objetos que son del mismo tipo y son iguales deben devolver el mismo código hash. |
Cuando se genera una excepción en una cláusula finally o fault, la nueva excepción oculta la excepción activa. Cuando se genera una excepción en una cláusula filter, el runtime la detecta automáticamente. Esto hace que el error original sea difícil de detectar y depurar. |
|
CA2225: Las sobrecargas del operador tienen alternativas con nombre |
Se detectó una sobrecarga del operador y no se encontró el método alternativo con el nombre esperado. El miembro alternativo con nombre proporciona acceso a la misma funcionalidad que el operador; esto se hace para los desarrolladores que programan en lenguajes que no admiten operadores sobrecargados. |
Es posible que las versiones admitidas de .NET Framework no puedan utilizar los archivos de recursos compilados con versiones preliminares de .NET Framework. |
|
Un tipo público o protegido contiene un método público o protegido que utiliza la convención de llamada VarArgs en lugar de la palabra clave params. |
|
Las operaciones aritméticas no deben realizarse sin validar primero los operandos para asegurarse de que el resultado de la operación no se encuentra fuera del intervalo de valores posible de los tipos de datos que se utilicen. |
|
Se realiza una llamada a un método que tiene un parámetro de cadena cuyo nombre contiene "uri", "URI", "urn", "URN", "url" o "URL". El tipo declarativo del método contiene una sobrecarga de método correspondiente que tiene un parámetro System.Uri. |
|
CA2243: Los literales de cadena de atributo se deben analizar correctamente |
El parámetro de literal de cadena de un atributo no se analiza correctamente para una dirección URL, un GUID o una versión. |