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