Compartilhar via


CA2146: tipos devem ser pelo menos críticos como tipos base e interfaces

TypeName

TypesMustBeAtLeastAsCriticalAsBaseTypes

CheckId

CA2146

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

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

Descrição da Regra

Esta regra é disparada quando um tipo derivado tem um atributo de transparência de segurança que não seja tão importante quanto sua tipo de base ou interface implementada.Apenas os tipos críticos podem derivar os tipos de base críticos ou implementar interfaces críticos do, e apenas os tipos críticos ou seguro- críticos podem derivar os tipos de base seguro- críticos ou implementar interfaces seguro- críticos.Violações desta regra no resultado da transparência de nível 2 em TypeLoadException para o tipo derivado.

Como Corrigir Violações

Para corrigir essa violação, marque o tipo derivado ou implementando com um atributo de transparência pelo menos que seja tão importante quanto o tipo de base ou a interface.

Quando Suprimir Alertas

Não elimine um alerta desta 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
    {
    }

}