CS.SV.TYPE_EQVL

セキュリティクリティカルな型は型等価性に関与していない場合があります。

この規則は、クリティカルな型、つまり型の等価性に関与しているクリティカルなメソッドまたはフィールドを含んでいる型で発動します。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;
     }
 }

この例では、この規則を発動させることになる、インターフェイス、メソッド、およびフィールドを示しています。