Поделиться через


CA2126: запросы компоновки типа требуют запросы наследования

TypeName

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: запросы компоновки переопределения должны быть идентичны базовым

См. также

Основные понятия

Правила написания безопасного кода

Требования наследования

Требования связывания

Требования