Share via


CA2135: Level 2 assemblies should not contain LinkDemands

Applies to: yesVisual Studio noVisual Studio for Mac

Note

This article applies to Visual Studio 2017. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

Item Value
RuleId CA2135
Category Microsoft.Security
Breaking change Breaking

Cause

A class or class member is using a SecurityAction in an application that is using Level 2 security.

Note

This rule has been deprecated. For more information, see Deprecated rules.

Rule description

LinkDemands are deprecated in the level 2 security rule set. Instead of using LinkDemands to enforce security at just-in-time (JIT) compilation time, mark the methods, types, and fields with the SecurityCriticalAttribute attribute.

How to fix violations

To fix a violation of this rule, remove the SecurityAction and mark the type or member with the SecurityCriticalAttribute attribute.

When to suppress warnings

Do not suppress a warning from this rule.

Example

In the following example, the SecurityAction should be removed and the method marked with the SecurityCriticalAttribute attribute.

using System;
using System.Security;
using System.Security.Permissions;

namespace TransparencyWarningsDemo
{

    public class MethodsProtectedWithLinkDemandsClass
    {
        // CA2135 violation - the LinkDemand should be removed, and the method marked [SecurityCritical] instead
        [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
        public void ProtectedMethod()
        {
        }
    }
}