CA2140: 透過的コードは、セキュリティ上重要な項目を参照してはならない

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

分類

Microsoft.Security

互換性に影響する変更点

あり

原因

次のような透過的なメソッドです。

  • セキュリティ上重要なセキュリティ例外型を処理する。

  • セキュリティ上重要な型としてマークされたパラメーターを持つ。

  • セキュリティ上重要な制約が指定されたジェネリック パラメーターを持つ。

  • セキュリティ上重要な型のローカル変数を持つ。

  • セキュリティ上重要としてマークされたデータ型を参照する。

  • セキュリティ上重要としてマークされたメソッドを呼び出す。

  • セキュリティ上重要としてマークされたフィールドを参照する。

  • セキュリティ上重要としてマークされたデータ型を返す。

規則の説明

SecurityCriticalAttribute 属性が適用されたコード要素は、セキュリティ上重要になります。透過的なメソッドでセキュリティ上重要な要素を使用することはできません。透過データ型でセキュリティ上重要な型を使用しようとすると、TypeAccessExceptionMethodAccessExceptionFieldAccessException のいずれかの例外が発生します。

違反の修正方法

この規則違反を修正するには、次のいずれかの処理を実行します。

警告を抑制する状況

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

使用例

次の例では、セキュリティ上重要なジェネリック コレクション、フィールド、およびメソッドを、透過的なメソッドで参照しています。

using System;
using System.Security;
using System.Collections.Generic;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class SecurityCriticalClass { }

    public class TransparentMethodsReferenceCriticalCodeClass
    {
        [SecurityCritical]
        private object m_criticalField;

        [SecurityCritical]
        private void CriticalMethod() { }

        public void TransparentMethod()
        {
            // CA2140 violation - transparent method accessing a critical type.  This can be fixed by any of: 
            //  1. Make TransparentMethod critical 
            //  2. Make TransparentMethod safe critical 
            //  3. Make CriticalClass safe critical 
            //  4. Make CriticalClass transparent
            List<SecurityCriticalClass> l = new List<SecurityCriticalClass>();

            // CA2140 violation - transparent method accessing a critical field.  This can be fixed by any of: 
            //  1. Make TransparentMethod critical 
            //  2. Make TransparentMethod safe critical 
            //  3. Make m_criticalField safe critical 
            //  4. Make m_criticalField transparent
            m_criticalField = l;

            // CA2140 violation - transparent method accessing a critical method.  This can be fixed by any of: 
            //  1. Make TransparentMethod critical 
            //  2. Make TransparentMethod safe critical 
            //  3. Make CriticalMethod safe critical 
            //  4. Make CriticalMethod transparent
            CriticalMethod();
        }
    }
}

参照

関連項目

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security