CA2126: Type link demands require inheritance demands


For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.

Breaking ChangeBreaking

A public unsealed type is protected with a link demand, has an overridable method, and neither the type nor the method is protected with an inheritance demand.

A link demand on a method or its declaring type requires the immediate caller of the method to have the specified permission. An inheritance demand on a method requires an overriding method to have the specified permission. An inheritance demand on a type requires a deriving class to have the specified permission.

To fix a violation of this rule, secure the type or the method with an inheritance demand for the same permission as the link demand.

Do not suppress a warning from this rule.

The following example shows a type that violates the rule.

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

CA2108: Review declarative security on value types

CA2112: Secured types should not expose fields

CA2122: Do not indirectly expose methods with link demands

CA2123: Override link demands should be identical to base

Secure Coding Guidelines
Inheritance Demands
Link Demands