CA2146: Los tipos deben ser al menos tan críticos para la seguridad como sus interfaces y tipos base
TypeName |
TypesMustBeAtLeastAsCriticalAsBaseTypes |
Identificador de comprobación |
CA2146 |
Categoría |
Microsoft.Security |
Cambio problemático |
Problemático |
Motivo
Un tipo transparente se deriva de un tipo que está marcado con SecuritySafeCriticalAttribute o SecurityCriticalAttribute, o de un tipo que está marcado con el atributo SecuritySafeCriticalAttribute se deriva de un tipo que está marcado con el atributo SecurityCriticalAttribute.
Descripción de la regla
Esta regla se desencadena cuando un tipo derivado tiene un atributo de transparencia de seguridad que no es tan crítico como su tipo base o interfaz implementada.Solo los tipos críticos pueden derivar de los tipos base críticos o implementar interfaces críticas, y solo los tipos críticos o críticos para la seguridad pueden derivar de tipos base críticos para la seguridad o implementar interfaces críticas para la seguridad.Las infracciones de esta regla en una transparencia de nivel 2 producirán una TypeLoadException para el tipo derivado.
Cómo corregir infracciones
Para corregir esta infracción, marque el tipo derivado o que implementa con un atributo de transparencia que sea por lo menos tan crítico como el tipo base o la interfaz.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Ejemplo
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
{
}
}