CA2131: Typy kritické pro zabezpečení nemusejí podporovat účast na ekvivalenci typů
TypeName |
CriticalTypesMustNotParticipateInTypeEquivalence |
CheckId |
CA2131 |
Kategorie |
Microsoft.Security |
Narušující změna |
Narušující |
Typ se účastní porovnávání typu, přičemž typ samotný nebo jeho člen nebo pole je označen atributem SecurityCriticalAttribute.
Toto pravidlo je spuštěno pro všechny kritické typy nebo typy obsahující kritické metody nebo pole, které se účastní porovnávání typu.Zjistí-li modul CLR takový typ, jeho načtení za běhu se nezdaří a je vyvolána výjimka TypeLoadException.Obvykle ke spuštění tohoto pravidla dochází pouze v případě, že uživatel implementuje porovnávání typů ručně a nepřenechává porovnávání typů na nástroji tlbimp a kompilátorech.
Chcete-li opravit porušení tohoto pravidla, odstraňte atribut SecurityCritical.
Nepotlačujte upozornění na toto pravidlo.
Následující příklad ukazuje rozhraní, metodu a pole, které spustí toto pravidlo.
using System;
using System.Security;
using System.Runtime.InteropServices;
[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: AllowPartiallyTrustedCallers]
namespace TransparencyWarningsDemo
{
// CA2131 error - critical type participating in equivilance
[SecurityCritical]
[TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
public interface ICriticalEquivilentInterface
{
void Method1();
}
[TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ITransparentEquivilentInterface")]
public interface ITransparentEquivilentInterface
{
// CA2131 error - critical method in a type participating in equivilance
[SecurityCritical]
void CriticalMethod();
}
[SecurityCritical]
[TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
public struct EquivilentStruct
{
// CA2131 error - critical field in a type participating in equivalence
[SecurityCritical]
public int CriticalField;
}
}