Compartir a través de


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

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;
    //    }
    }

}