Поделиться через


TypeBuilder.AddDeclarativeSecurity(SecurityAction, PermissionSet) Метод

Определение

Добавляет декларативную безопасность в этот тип.

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)

Параметры

action
SecurityAction

Выполняемое действие безопасности, например Demand, Assert и т. д.

pset
PermissionSet

Набор разрешений, к которому применяется действие.

Исключения

action является недопустимым (RequestMinimum, RequestOptional и RequestRefuse являются недопустимыми).

Содержащий тип был создан с помощью CreateType().

-или-

Набор разрешений pset содержит действие, добавленное ранее с помощью AddDeclarativeSecurity.

pset имеет значение null.

Примеры

В следующем примере показано использование AddDeclarativeSecurity метода для добавления требования SecurityPermission к безопасности с SecurityPermissionFlag.ControlEvidence флагом к динамическому типу с именем MyDynamicClassв сборке с именем EmittedExample.dll. В этом примере выходные данные консоли отсутствуют; После запуска можно использовать Ildasm.exe (дизассемблер IL) для изучения EmittedExample.dll. В MyDynamicClassоткройте инструкцию .class public auto ansi , чтобы просмотреть декларативное разрешение.

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

Комментарии

AddDeclarativeSecurity может вызываться несколько раз, при этом каждый вызов указывает действие безопасности (например, Требовать, Утверждение или Запретить) и набор разрешений, которые применяются к действию.

Примечание

В платформа .NET Framework версий 1.0, 1.1 и 2.0 декларативные атрибуты безопасности, примененные к типу с помощью этого метода, хранятся в старом формате метаданных XML.

Применяется к