CA2137 : Les méthodes transparentes doivent contenir uniquement des IL vérifiablesCA2137: Transparent methods must contain only verifiable IL

TypeNameTypeName TransparentMethodsMustBeVerifiableTransparentMethodsMustBeVerifiable
CheckIdCheckId CA2137CA2137
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Une méthode contient du code non vérifiable ou retourne un type par référence.A method contains unverifiable code or returns a type by reference.

Description de la règleRule description

Cette règle se déclenche lorsque le code transparent de sécurité tente d’exécuter du code MSIL (Microsoft Intermediate Language) non vérifiable.This rule fires on attempts by security transparent code to execute unverifiable MSIL (Microsoft Intermediate Language). Toutefois, la règle ne contient pas de vérificateur IL (Intermediate Language) complet, et à la place utilise l’heuristique pour intercepter la plupart des violations de vérification MSIL.However, the rule does not contain a full IL verifier, and instead uses heuristics to catch most violations of MSIL verification.

Pour être certain que votre code contient du code MSIL vérifiable uniquement, exécutez Peverify.exe (outil PEVerify) sur votre assembly.To be certain that your code contains only verifiable MSIL, run Peverify.exe (PEVerify Tool) on your assembly. Exécutez PEVerify avec le / transparent option qui limite la sortie aux seuls non vérifiable méthodes transparentes qui entraînerait une erreur.Run PEVerify with the /transparent option which limits the output to only unverifiable transparent methods which would cause an error. Si le / option transparente n’est pas utilisée, PEVerify vérifie également des méthodes critiques qui peuvent contenir du code non vérifiable.If the /transparent option is not used, PEVerify also verifies critical methods that are allowed to contain unverifiable code.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, marquez la méthode avec le SecurityCriticalAttribute ou SecuritySafeCriticalAttribute d’attribut, ou supprimez le code non vérifiable.To fix a violation of this rule, mark the method with the SecurityCriticalAttribute or SecuritySafeCriticalAttribute attribute, or remove the unverifiable code.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

La méthode dans cet exemple utilise du code non vérifiable et doit être marquée avec le SecurityCriticalAttribute ou SecuritySafeCriticalAttribute attribut.The method in this example uses unverifiable code and should be marked with the SecurityCriticalAttribute or SecuritySafeCriticalAttribute attribute.

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

}