CA2131: セキュリティ上重要な型は型等価性に参加してはならない
TypeName |
CriticalTypesMustNotParticipateInTypeEquivalence |
CheckId |
CA2131 |
分類 |
Microsoft.Security |
互換性に影響する変更点 |
あり |
原因
データ型は型の等価性に関与し、型自身、または型のメンバーあるいはフィールドのいずれかに対して SecurityCriticalAttribute 属性が適用されます。
規則の説明
この規則は、すべての重要な型、または型の等価性に関与する重要なメソッドあるいはフィールドが定義されたすべての型に対して適用されます。こうした型が CLR によって検出されると、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;
}
}