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