다음을 통해 공유


CA2146: 형식은 최소한 기본 형식 및 인터페이스만큼 중요해야 합니다.

TypeName

TypesMustBeAtLeastAsCriticalAsBaseTypes

CheckId

CA2146

범주

Microsoft.Security

변경 수준

주요 변경

원인

투명 형식은 SecuritySafeCriticalAttribute 또는 SecurityCriticalAttribute로 표시된 형식 또는 SecurityCriticalAttribute 특성으로 표시된 형식에서 파생된 SecuritySafeCriticalAttribute 특성으로 표시된 형식에서 파생됩니다.

규칙 설명

이 규칙은 파생 형식에 기본 형식 또는 구현된 인터페이스만큼 중요하지 않은 보안 투명성 특성이 있을 때 적용됩니다. 중요한 기본 형식에서 파생되거나 중요한 인터페이스를 구현할 수 있는 것은 중요한 형식뿐이고, 안전에 중요한 기본 형식에서 파생되거나 안전에 중요한 인터페이스를 구현할 수 있는 것은 중요하거나 안전에 중요한 형식뿐입니다. 수준 2 투명성에서 이 규칙 위반은 파생된 형식에 대한 TypeLoadException에서 발생합니다.

위반 문제를 해결하는 방법

이 위반 문제를 해결하려면 파생되거나 구현 중인 형식을 최소한 기본 형식 또는 인터페이스만큼 중요한 투명도 특성으로 표시하십시오.

경고를 표시하지 않는 경우

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

예제

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    [SecuritySafeCritical]
    public class SafeCriticalBase
    {
    }

    // CA2156 violation - a transparent type cannot derive from a safe critical type.  The fix is any of:
    //   1. Make SafeCriticalBase transparent
    //   2. Make TransparentFromSafeCritical safe critical
    //   3. Make TransparentFromSafeCritical critical
    public class TransparentFromSafeCritical : SafeCriticalBase
    {
    }

    [SecurityCritical]
    public class CriticalBase
    {
    }

    // CA2156 violation - a transparent type cannot derive from a critical type.  The fix is any of:
    //   1. Make CriticalBase transparent
    //   2. Make TransparentFromCritical critical
    public class TransparentFromCritical : CriticalBase
    {
    }

    // CA2156 violation - a safe critical type cannot derive from a critical type.  The fix is any of:
    //   1. Make CriticalBase transparent
    //   2. Make CriticalBase safe critical
    //   3. Make SafeCriticalFromCritical critical
    [SecuritySafeCritical]
    public class SafeCriticalFromCritical : CriticalBase
    {
    }

}