次の方法で共有


CA2136: メンバーには、透過性注釈の競合があってはならない

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

分類

Microsoft.Security

互換性に影響する変更点

あり

原因

型のメンバーが、そのメンバーのコンテナーのセキュリティ属性とは異なる透過性を持つ System.Security セキュリティ属性でマークされている場合に、この規則が適用されます。

規則の説明

透過性属性は、大きいスコープのコード要素から小さいスコープの要素に適用されます。大きいスコープのコード要素の透過性属性は、最初の要素に含まれているコード要素の透過性属性よりも優先されます。たとえば、SecurityCriticalAttribute 属性でマークされたクラスに SecuritySafeCriticalAttribute 属性でマークされたメソッドを含めることはできません。

違反の修正方法

この違反を修正するには、下位のスコープを持つコード要素のセキュリティ属性を削除するか、そのコード要素を含んでいるコード要素と同じセキュリティ属性に変更します。

警告を抑制する状況

この規則による警告を抑制しないでください。

使用例

次の例では、メソッドが SecuritySafeCriticalAttribute 属性でマークされていて、SecurityCriticalAttribute 属性でマークされたクラスのメンバーです。このセキュリティ セーフ属性は削除する必要があります。

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class CriticalClass
    {
        // CA2136 violation - this method is not really safe critical, since the larger scoped type annotation 
        // has precidence over the smaller scoped method annotation.  This can be fixed by removing the 
        // SecuritySafeCritical attribute on this method
        [SecuritySafeCritical]
        public void SafeCriticalMethod()
        {
        }
    }
}