Udostępnij za pośrednictwem


CA2146: Typy muszą być co najmniej tak ważne, jak ich typy podstawowe i interfejsy

TypeName

TypesMustBeAtLeastAsCriticalAsBaseTypes

CheckId

CA2146

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Przezroczysty typ pochodzi od typu, oznaczonego SecuritySafeCriticalAttribute lub SecurityCriticalAttribute, lub typu, oznaczonego atrybutem SecuritySafeCriticalAttribute pochodzi od typu oznaczonego atrybutem SecurityCriticalAttribute.

Opis reguły

Ta reguła jest uruchamiana, gdy typ pochodny ma atrybut przezroczystości pod względem zabezpieczeń, który nie jest tak tak krytyczny, jak jego typ podstawowy lub zaimplementowany interfejs.Tylko typy krytyczne pod względem zabezpieczeń mogą pochodzić od podstawowych typów krytycznych lub implementować interfejsy krytyczne, a tylko typy krytyczne lub krytyczne dla bezpieczeństwa mogą pochodzić od podstawowych typów krytycznych dla bezpieczeństwa lub implementować interfejsy krytyczne dla bezpieczeństwa.Naruszenie tej reguły na poziomie przezroczystości 2, powoduje TypeLoadException dla typów pochodnych.

Jak naprawić naruszenia

Aby naprawić naruszenie, oznacz typ pochodny lub implementujący atrybutem przezroczystości co najmniej tak krytycznym jak typ podstawowy lub interfejs.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

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

}