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