Share via


CA2136: Üyeler çakışan saydamlık ek açıklamalarına sahip olmamalıdır

Ürün Değer
RuleId CA2136
Kategori Microsoft.Security
Hataya neden olan değişiklik Yeni

Neden

Bu kural, bir tür üyesi, üyenin bir System.Security kapsayıcısının güvenlik özniteliğinden farklı bir saydamlığa sahip bir güvenlik özniteliğiyle işaretlendiğinde tetiklenir.

Dekont

Bu kural kullanım dışı bırakıldı. Daha fazla bilgi için bkz . Kullanım dışı kurallar.

Kural açıklaması

Saydamlık nitelikleri, geniş kapsam kodlu öğelerden daha küçük kapsamlı öğelere uygulanır. Geniş kapsamı ile kod öğelerinin saydamlık öznitelikleri ilk öğeden kapsayan kod öğelerinin saydam öznitelikleri önceliklidir. Örneğin, özniteliğiyle SecurityCriticalAttribute işaretlenmiş bir sınıf, özniteliğiyle SecuritySafeCriticalAttribute işaretlenmiş bir yöntem içeremez.

İhlalleri düzeltme

Bu ihlali düzeltmek için, güvenlik özniteliğini daha düşük kapsama sahip kod öğesinden kaldırın veya özniteliğini içeren kod öğesiyle aynı olacak şekilde değiştirin.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan gelen uyarıları gizlemeyin.

Örnek

Aşağıdaki örnekte, bir yöntem özniteliğiyle SecuritySafeCriticalAttribute işaretlenir ve özniteliğiyle işaretlenmiş bir sınıfın SecurityCriticalAttribute üyesidir. Güvenlik güvenli özniteliği kaldırılmalıdır.

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