CA2137: Los métodos transparentes deben contener solo IL que se pueda comprobar
Nombre de tipo |
TransparentMethodsMustBeVerifiable |
Identificador de comprobación |
CA2137 |
Categoría |
Microsoft.Security |
Cambio problemático |
Sí |
Motivo
Un método contiene código que no se puede comprobar o devuelve un tipo por referencia.
Descripción de la regla
Esta regla se desencadena en los intentos del código transparente en seguridad de ejecutar MSIL no comprobable (Lenguaje intermedio de Microsoft).Sin embargo, la regla no contiene un comprobador de IL completo y, en su lugar, utiliza la heurística para detectar la mayoría de las infracciones de comprobación MSIL.
Para estar seguro de que su código solo contiene MSIL comprobable, ejecute Peverify.exe (Herramienta PEVerify) en su ensamblado.Ejecute PEVerify con la opción /transparent que limita la salida solo a los métodos transparentes inaveriguables que producirían un error.Si no se utiliza la opción /transparent, PEVerify también comprueba los métodos críticos que pueden contener código no comprobable.
Cómo corregir infracciones
Para corregir una infracción de esta regla, marque el método con el atributo SecuritySafeCriticalAttribute o SecurityCriticalAttribute, o quite el código no comprobable.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Ejemplo
El método de este ejemplo utiliza el código no comprobable y se debe marcar con el atributo SecuritySafeCriticalAttribute o SecurityCriticalAttribute.
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public class UnverifiableMethodClass
{
// CA2137 violation - transparent method with unverifiable code. This method should become critical or
// safe critical
// public unsafe byte[] UnverifiableMethod(int length)
// {
// byte[] bytes = new byte[length];
// fixed (byte* pb = bytes)
// {
// *pb = (byte)length;
// }
// return bytes;
// }
}
}