CA2137: 투명한 메서드는 안정형 IL만 포함해야 합니다.
항목 | 값 |
---|---|
RuleId | CA2137 |
범주 | Microsoft.Security |
주요 변경 내용 | 주요 변경 |
원인
메서드가 확인할 수 없는 코드를 포함하거나 형식을 참조로 반환합니다.
참고 항목
이 규칙은 더 이상 사용되지 않습니다. 자세한 내용은 사용되지 않는 규칙을 참조하세요.
규칙 설명
이 규칙은 보안 투명 코드에서 확인할 수 없는 MSIL(Microsoft Intermediate Language)을 실행하려고 할 때 적용됩니다. 그러나 이 규칙은 완전한 IL 검증 도구를 포함하지 않으며 대신 추론을 사용하여 MSIL 확인 시 대부분의 위반을 catch합니다.
코드에 확인 가능한 MSIL만 포함되었는지 확인하려면 어셈블리에서 Peverify.exe(PEVerify 도구)를 실행합니다. 오류가 발생하는, 확인이 불가능한 투명 메서드만 출력하도록 제한하는 /transparent 옵션을 사용하여 PEVerify를 실행합니다. /transparent 옵션을 사용하지 않으면 PEVerify는 확인이 불가능한 코드가 포함될 수 있는 중요한 메서드도 확인합니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 메서드를 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 표시하거나 확인이 불가능한 코드를 제거합니다.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예시
이 예제의 메서드는 확인이 불가능한 코드를 사용하며 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 표시되어야 합니다.
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;
// }
}
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기