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()
{
}
}
}