英語で読む

次の方法で共有


TypeBuilder.AddDeclarativeSecurity(SecurityAction, PermissionSet) メソッド

定義

この型に宣言セキュリティを追加します。

C#
public void AddDeclarativeSecurity(System.Security.Permissions.SecurityAction action, System.Security.PermissionSet pset);

パラメーター

action
SecurityAction

Demand、Assert などの実行されるセキュリティ アクション。

pset
PermissionSet

アクションが適用されるアクセス許可のセット。

例外

action が正しくありません (RequestMinimumRequestOptionalRequestRefuse が正しくない)。

含んでいる型は CreateType() を使用して作成されています。

- または -

アクセス許可のセット pset に、AddDeclarativeSecurity によって以前に追加されたアクションが含まれています。

psetnullです。

次の例では、 メソッドをAddDeclarativeSecurity使用して、EmittedExample.dll という名前のアセンブリ内の というMyDynamicClass名前の動的型に、 フラグを使用SecurityPermissionFlag.ControlEvidenceして のセキュリティ要求SecurityPermissionを追加する方法を示します。 この例では、コンソール出力は生成されません。実行後、 Ildasm.exe (IL 逆アセンブラー) を使用して EmittedExample.dll を調べることができます。 で MyDynamicClassステートメントを .class public auto ansi 開き、宣言型のアクセス許可を表示します。

C#
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");
      }
   }
}

注釈

AddDeclarativeSecurity は、セキュリティ アクション (Demand、Assert、Deny など) とアクションに適用されるアクセス許可のセットを指定する呼び出しごとに複数回呼び出すことができます。

注意

.NET Framework バージョン 1.0、1.1、および 2.0 では、このメソッドを使用して型に適用される宣言型のセキュリティ属性は、古い XML メタデータ形式で格納されます。

適用対象

製品 バージョン
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1