TypeBuilder.AddDeclarativeSecurity(SecurityAction, PermissionSet) Metod

Definition

Lägger till deklarativ säkerhet för den här typen.

public:
 void AddDeclarativeSecurity(System::Security::Permissions::SecurityAction action, System::Security::PermissionSet ^ pset);
public void AddDeclarativeSecurity(System.Security.Permissions.SecurityAction action, System.Security.PermissionSet pset);
member this.AddDeclarativeSecurity : System.Security.Permissions.SecurityAction * System.Security.PermissionSet -> unit
Public Sub AddDeclarativeSecurity (action As SecurityAction, pset As PermissionSet)

Parametrar

action
SecurityAction

Den säkerhetsåtgärd som ska vidtas, till exempel Begäran, Assert och så vidare.

pset
PermissionSet

Den uppsättning behörigheter som åtgärden gäller för.

Undantag

är action ogiltigt (RequestMinimum, RequestOptionaloch RequestRefuse är ogiltigt).

Den innehållande typen har skapats med .CreateType()

-eller-

Behörighetsuppsättningen pset innehåller en åtgärd som lades till tidigare av AddDeclarativeSecurity.

pset är null.

Exempel

I följande exempel visas hur metoden används AddDeclarativeSecurity för att lägga till ett säkerhetsbehov för SecurityPermission med flaggan till en dynamisk typ med SecurityPermissionFlag.ControlEvidence namnet MyDynamicClass, i en sammansättning med namnet EmittedExample.dll. Exemplet genererar inga konsolutdata. När du har kört den kan du använda Ildasm.exe (IL Disassembler) för att undersöka EmittedExample.dll. I MyDynamicClassöppnar du -instruktionen .class public auto ansi för att se deklarativ behörighet.

using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Security;
using System.Security.Permissions;

namespace CustomAttribute_Sample
{
   public class MyApplication
   {
      static void Main()
      {
         // Create a simple name for the assembly, and create the assembly and module.
         AssemblyName myAssemblyName = new AssemblyName("EmittedAssembly");
         AssemblyBuilder myAssemblyBuilder =
            AppDomain.CurrentDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
         ModuleBuilder myModuleBuilder =
            myAssemblyBuilder.DefineDynamicModule("EmittedAssembly", "EmittedAssembly.dll");

         // Define a public class named "MyDynamicClass" in the assembly.
         TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("MyDynamicClass",
            TypeAttributes.Public);

         // Create a permission set and add a security permission
         // with the ControlEvidence flag.
         //
         PermissionSet myPermissionSet = new PermissionSet(PermissionState.None);
         myPermissionSet.AddPermission(
             new SecurityPermission(SecurityPermissionFlag.ControlEvidence));

         // Add the permission set to the MyDynamicClass type,
         // as a declarative security demand.
         //
         myTypeBuilder.AddDeclarativeSecurity(SecurityAction.Demand, myPermissionSet);

         Type myType = myTypeBuilder.CreateType();
         myAssemblyBuilder.Save("EmittedAssembly.dll");
      }
   }
}
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security
Imports System.Security.Permissions

Namespace CustomAttribute_Sample

   Class MyApplication
      
      Shared Sub Main()
         ' Create a simple name for the assembly; create the assembly and the module.        
         Dim myAssemblyName As New AssemblyName("EmittedAssembly")
         Dim myAssemblyBuilder As AssemblyBuilder = _
                  AppDomain.CurrentDomain.DefineDynamicAssembly( _
                          myAssemblyName, AssemblyBuilderAccess.RunAndSave)
         Dim myModuleBuilder As ModuleBuilder = _
                  myAssemblyBuilder.DefineDynamicModule("EmittedAssembly", "EmittedAssembly.dll")

         ' Define a public class named "MyDynamicClass" in the assembly.
         Dim myTypeBuilder As TypeBuilder = _
                  myModuleBuilder.DefineType("MyDynamicClass", TypeAttributes.Public)


         ' Create a permission set and add a security permission
         ' with the ControlEvidence flag.
         '
         Dim myPermissionSet As New PermissionSet(PermissionState.None)
         Dim ce As New SecurityPermission(SecurityPermissionFlag.ControlEvidence)
         myPermissionSet.AddPermission(ce)

         ' Add the permission set to the MyDynamicClass type,
         ' as a declarative security demand.
         '
         myTypeBuilder.AddDeclarativeSecurity(SecurityAction.Demand, myPermissionSet)


         Dim myType As Type = myTypeBuilder.CreateType()
         myAssemblyBuilder.Save("EmittedAssembly.dll")
      End Sub 
   End Class 
End Namespace

Kommentarer

AddDeclarativeSecurity kan anropas flera gånger med varje anrop som anger en säkerhetsåtgärd (till exempel Begäran, Bekräfta eller Neka) och en uppsättning behörigheter som gäller för åtgärden.

Note

I .NET Framework-versionerna 1.0, 1.1 och 2.0 lagras de deklarativa säkerhetsattribut som tillämpas på en typ med den här metoden i det gamla XML-metadataformatet.

Gäller för