共用方式為


CA2137:透明方法必須只包含可驗證的 IL

型別名稱

TransparentMethodsMustBeVerifiable

CheckId

CA2137

分類

Microsoft.Security

中斷變更

中斷

原因

方法包含無法驗證的程式碼,或以傳址方式傳回型別。

規則描述

當安全性透明程式碼嘗試執行無法驗證的 MSIL (Microsoft Intermediate Language) 時,就會引發此規則。 不過,此規則不包含完整的 IL 驗證器,並是使用啟發式來擷取多數的 MSIL 驗證違規情形。

若要確定您的程式碼只包含可驗證的 MSIL,請在您的組件上執行 Peverify.exe (PEVerify 工具)。 搭配 /transparent 選項執行 PEVerify,此選項會將輸出限制為只有會造成錯誤的未經驗證透明方法。 如果不使用 /transparent 選項,PEVerify 也會驗證允許包含未經驗證的程式碼的關鍵方法。

如何修正違規

若要修正此規則的違規情形,請在方法標記 SecurityCriticalAttributeSecuritySafeCriticalAttribute 屬性,或者移除未經驗證的程式碼。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

這個範例中的方法使用未經驗證的程式碼,且應標記 SecurityCriticalAttributeSecuritySafeCriticalAttribute 屬性。

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

}