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í |
Příčina
Typ se účastní porovnávání typu, přičemž typ samotný nebo jeho člen nebo pole je označen atributem SecurityCriticalAttribute.
Popis pravidla
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.
Jak vyřešit porušení
Chcete-li opravit porušení tohoto pravidla, odstraňte atribut SecurityCritical.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
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;
}
}