次の方法で共有


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

参照

概念

透過的セキュリティ コード、レベル 2