CA2136:成員不應該具有衝突的透明度附註
型別名稱 |
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()
{
}
}
}