CA2132: Konstruktory domyślne muszą być co najmniej tak krytyczne, jak podstawowe konstruktory domyślne
Pozycja | Wartość |
---|---|
Ruleid | CA2132 |
Kategoria | Microsoft.Security |
Zmiana powodująca niezgodność | Kluczowa |
Uwaga
To ostrzeżenie jest stosowane tylko do kodu z uruchomioną biblioteką CoreCLR (wersja środowiska CLR specyficzna dla aplikacji internetowych silverlight).
Przyczyna
Atrybut przezroczystości domyślnego konstruktora klasy pochodnej nie jest tak krytyczny, jak przezroczystość klasy bazowej.
Uwaga
Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.
Opis reguły
Typy i elementy członkowskie, których SecurityCriticalAttribute nie można używać w kodzie aplikacji Silverlight. Krytyczne dla bezpieczeństwa typy i składowe mogą być używane tylko przez zaufany kod w środowisku .NET Framework dla biblioteki klas Silverlight. Ze względu na to, że publiczna lub chroniona konstrukcja w klasie pochodnej musi mieć taką samą lub większą przejrzystość jak jej klasa bazowa, klasy w aplikacji nie mogą pochodzić z klasy oznaczonej jako SecurityCritical.
W przypadku kodu platformy CoreCLR, jeśli typ podstawowy ma publiczny lub chroniony bez przezroczystego konstruktora domyślnego, typ pochodny musi przestrzegać domyślnych reguł dziedziczenia konstruktora. Typ pochodny musi również mieć konstruktor domyślny, a konstruktor musi być co najmniej krytycznym konstruktorem domyślnym typu podstawowego.
Jak naprawić naruszenia
Aby naprawić naruszenie, usuń typ lub nie pochodzi z zabezpieczeń, które nie są przezroczyste.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń z tej reguły. Naruszenia tej reguły według kodu aplikacji spowodują odmowę załadowania typu za pomocą TypeLoadExceptionklasy CoreCLR.
Kod
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public class BaseWithSafeCriticalDefaultCtor
{
[SecuritySafeCritical]
public BaseWithSafeCriticalDefaultCtor() { }
}
public class DerivedWithNoDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a public or protected non-transparent default .ctor, the
// derived type must also have a default .ctor
}
public class DerivedWithTransparentDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a safe critical default .ctor, the derived type must have
// either a safe critical or critical default .ctor. This is fixed by making this .ctor safe critical
// (however, user code cannot be safe critical, so this fix is platform code only).
DerivedWithTransparentDefaultCtor() { }
}
public class BaseWithCriticalCtor
{
[SecurityCritical]
public BaseWithCriticalCtor() { }
}
public class DerivedWithSafeCriticalDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a critical default .ctor, the derived must also have a critical
// default .ctor. This is fixed by making this .ctor critical, which is not available to user code
[SecuritySafeCritical]
public DerivedWithSafeCriticalDefaultCtor() { }
}
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla