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