CA2137: Métodos transparentes devem conter apenas o IL verificável

TypeName

TransparentMethodsMustBeVerifiable

CheckId

CA2137

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um método contém código ou retorna um tipo por referência.

Descrição da regra

Essa regra é acionado tentativas pelo código transparent de segurança para executar a MSIL não verificável (Microsoft Intermediate Language). No entanto, a regra não contém um verificador de IL completo e em vez disso, usa heurística para detectar a maioria das violações de verificação de MSIL.

Para ter certeza de que seu código contém apenas verificável MSIL, execute Peverify (ferramenta PEVerify) no seu assembly. Execução de PEVerify com o /transparent opção que limita a saída somente não verificável transparentes métodos que causaria um erro. Se o / a opção transparente não for usada, PEVerify também verifica os métodos essenciais que podem conter código não verificado.

Como corrigir violações

Para corrigir uma violação desta regra, marcar o método com o SecurityCriticalAttribute ou SecuritySafeCriticalAttribute de atributo, ou remover o código não verificado.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

O método neste exemplo usa o código e devem ser marcado com o SecurityCriticalAttribute ou SecuritySafeCriticalAttribute atributo.

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

}