Sdílet prostřednictvím


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

}