CA2126:类型链接请求需要继承请求

类型名

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

类别

Microsoft.Security

是否重大更改

原因

公共的非密封类型用链接请求保护并且具有可重写的方法,该类型或方法都未用继承请求进行保护。

规则说明

对方法或其声明类型的链接请求要求该方法的直接调用方具有指定的权限。 对方法的继承请求要求重写方法具有指定的权限。 对类型的继承请求要求派生类具有指定的权限。

如何解决冲突

若要修复与该规则的冲突,请使用与链接请求具有相同权限的继承请求来保护类型或方法。

何时禁止显示警告

不要禁止显示此规则发出的警告。

示例

下面的示例演示一个与该规则冲突的类型。

Imports System
Imports System.Security.Permissions

Namespace SecurityLibrary

    <EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
    Public Class TypesWithLinkDemands

        Protected Overridable Sub UnsecuredMethod()
        End Sub

        <EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
        Protected Overridable Sub SecuredMethod()
        End Sub

    End Class

End Namespace
using System;
using System.Security.Permissions;

namespace SecurityLibrary
{
   [EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
   public class TypesWithLinkDemands
   {
      public virtual void UnsecuredMethod() {}

      [EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
      public virtual void SecuredMethod() { }
   }
}
using namespace System;
using namespace System::Security::Permissions;

namespace SecurityLibrary
{
    [EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
    public ref class TypesWithLinkDemands
    {
    protected:
        virtual void UnsecuredMethod() {}

        [EnvironmentPermission(SecurityAction::InheritanceDemand, 
           Read = "PATH")]
        virtual void SecuredMethod() {}
    };
}

相关规则

CA2108:检查有关值类型的声明性安全

CA2112:受保护的类型不应公开字段

CA2122:不要使用链接请求间接公开方法

CA2123:重写的链接请求应与基相同

请参见

概念

继承需求

链接需求

需求

其他资源

代码安全维护指南