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