CA2149: 투명한 메서드는 네이티브 코드를 호출해서는 안 됩니다.

항목
RuleId CA2149
범주 Microsoft.Security
주요 변경 내용 주요 변경

원인

메서드가 P/Invoke와 같은 메서드 스텁을 통해 네이티브 함수를 호출합니다.

참고 항목

이 규칙은 더 이상 사용되지 않습니다. 자세한 내용은 사용되지 않는 규칙을 참조하세요.

규칙 설명

이 규칙은 P/Invoke 등을 통해 네이티브 코드를 직접 호출하는 투명 메서드에 적용됩니다. 이 규칙을 위반하면 수준 2 투명도 모델에서 MethodAccessException이 발생하고, 수준 1 투명도 모델에서 UnmanagedCode에 대한 전체 요청이 발생합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 네이티브 코드를 호출하는 메서드를 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 표시합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예제

using System;
using System.Runtime.InteropServices;

namespace TransparencyWarningsDemo
{

    public class CallNativeCodeClass
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool Beep(uint dwFreq, uint dwDuration);

        public void CallNativeMethod()
        {
            // CA2149 violation - transparent method calling native code
            Beep(10000, 1);
        }
    }

}