Compartilhar via


CA2146: Os tipos devem ser pelo menos, tão importantes quanto seus tipos base e interfaces

TypeName

TypesMustBeAtLeastAsCriticalAsBaseTypes

CheckId

CA2146

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um tipo transparente é derivado de um tipo que está marcado com o SecuritySafeCriticalAttribute ou o SecurityCriticalAttribute, ou um tipo que está marcado com o SecuritySafeCriticalAttribute atributo é derivado de um tipo que está marcado com o SecurityCriticalAttribute atributo.

Descrição da regra

Essa regra é acionado quando um tipo derivado tem um atributo de transparência de segurança que não é tão importante quanto o seu tipo base ou implementada a interface.Apenas os tipos de críticos podem derivar de tipos base essenciais ou implementar interfaces críticos e somente os tipos de críticos ou safe críticos podem derivar de tipos de base seguros para críticos ou implementar interfaces safe críticas.As violações dessa regra em transparência de nível 2 resultam em um TypeLoadException para o tipo derivado.

Como corrigir violações

Para corrigir essa violação, marca o tipo derivado ou implementação com um atributo de transparência é pelo menos, tão importante quanto a interface ou um tipo base.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

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

}