다음을 통해 공유


CA2131: 보안에 중요한 형식은 형식 등가에 참여할 수 없습니다.

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

범주

Microsoft.Security

변경 수준

주요 변경

원인

형식 등가에 참가하는 형식 및 형식 자체 또는 멤버나 형식의 필드는 SecurityCriticalAttribute 특성으로 표시됩니다.

규칙 설명

이 규칙은 중요한 형식 또는 중요한 메서드나 필드를 포함하는 형식이 형식 동등에 참여하는 경우에 적용됩니다. CLR이 이러한 형식을 감지하면 런타임에서 TypeLoadException과 함께 로드에 실패합니다. 일반적으로 이 규칙은 사용자가 tlbimp와 컴파일러를 이용하여 형식 동등을 수행하지 않고 수동으로 형식 동등을 구현하는 경우에만 적용됩니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 SecurityCritical 특성을 제거하십시오.

경고를 표시하지 않는 경우

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

예제

다음 예제에서는 이 규칙을 실행시키는 인터페이스, 메서드 및 필드를 보여줍니다.

using System;
using System.Security;
using System.Runtime.InteropServices;

[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: AllowPartiallyTrustedCallers]

namespace TransparencyWarningsDemo
{

    // CA2131 error - critical type participating in equivilance
    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public interface ICriticalEquivilentInterface
    {
        void Method1();
    }

    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ITransparentEquivilentInterface")]
    public interface ITransparentEquivilentInterface
    {
        // CA2131 error - critical method in a type participating in equivilance
        [SecurityCritical]
        void CriticalMethod();
    }

    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public struct EquivilentStruct
    {
        // CA2131 error - critical field in a type participating in equivalence
        [SecurityCritical]
        public int CriticalField;
    }
}

참고 항목

개념

보안 투명 코드, 수준 2