CA2131:安全关键类型不能参与类型等效
类型名 |
CriticalTypesMustNotParticipateInTypeEquivalence |
CheckId |
CA2131 |
类别 |
Microsoft.Security |
是否重大更改 |
是 |
原因
类型参与了类型等价性,类型本身或类型的成员或字段用 SecurityCriticalAttribute 特性标记。
规则说明
对于任何关键的类型或包含参与类型等效的关键方法或字段的类型,将引发此规则。 当 CLR 检测到这样的类型时,它未能在运行时使用 TypeLoadException 加载它。 通常,仅在用户手动实现类型等效而不是通过依赖 tlbimp 和编译器进行类型等效时,才会触发此规则。
如何解决冲突
要修复与该规则的冲突,请删除 SecurityCritical 特性。
何时禁止显示警告
不要禁止显示此规则发出的警告。
示例
下面的示例演示一个接口、一个方法和导致触发此规则的字段。
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;
}
}