CA2146: Typy nesmějí být kritické méně než jejich základní typy a rozhraní
Název_typu |
TypesMustBeAtLeastAsCriticalAsBaseTypes |
CheckId |
CA2146 |
Kategorie |
Microsoft.Security |
Změnit rozdělení |
Rozdělení |
Příčina
Průhledné typ je odvozen od typu, který je označen SecuritySafeCriticalAttribute nebo SecurityCriticalAttribute, nebo typ, který je označen SecuritySafeCriticalAttribute atributu je odvozen od typu, který je označen SecurityCriticalAttribute atributu.
Popis pravidla
Toto pravidlo je odvozený typ má průhlednost atribut zabezpečení, který není tak nutné jako základní typ nebo implementovat rozhraní.Pouze důležité typy lze odvodit z důležitých základních typů nebo implementovat rozhraní kritické a pouze kritické nebo bezpečné důležité typy lze odvodit ze základní typy důležité pro bezpečné nebo implementovat důležité pro bezpečné rozhraní.Za následek porušení tohoto pravidla v úrovni 2 průhlednost TypeLoadException odvozeného typu.
Jak opravit porušení
Chcete-li opravit toto narušení označte odvozené nebo prováděcí typ průhlednosti atribut, který je kritický jako základní typ nebo rozhraní.
Při potlačení upozornění
Nepotlačovat upozornění od tohoto pravidla.
Příklad
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
{
}
}