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
{
}
}