CA2126: As demandas de link do tipo exigem demandas de herança

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um tipo de público sem lacre está protegido com uma demanda de link tem um método substituível, e o tipo nem o método está protegido com uma demanda de herança.

Descrição da regra

Uma demanda de link em um método ou seu tipo declarativo requer que o chamador imediato do método tenha a permissão especificada. Uma demanda de herança em um método exige um método de substituição para ter a permissão especificada. Uma demanda de herança em um tipo requer uma classe derivada ter a permissão especificada.

Como corrigir violações

Para corrigir uma violação desta regra, proteja o tipo ou o método com uma demanda de herança para a mesma permissão de demanda de link.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.

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

Regras relacionadas

CA2108: Revisão de segurança declarativos sobre tipos de valor

CA2112: Tipos protegidos não devem expor campos

CA2122: Não exponha indiretamente métodos com demandas de link

CA2123: Demandas de link de substituição devem ser idênticas a base

Consulte também

Conceitos

Diretrizes para Codificação Segura

Demandas de herança

Demandas de link

Demandas