CA2135: Level 2 assemblies should not contain LinkDemands
Applies to: Visual Studio Visual 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()
{
}
}
}