Questa documentazione è stata archiviata e non viene gestita.

Metodo AppDomain.DefineDynamicAssembly (AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

Aggiornamento: novembre 2007

Consente di definire un assembly dinamico mediante nome, modalità di accesso e richieste di autorizzazione specificati.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public AssemblyBuilder DefineDynamicAssembly(
	AssemblyName name,
	AssemblyBuilderAccess access,
	PermissionSet requiredPermissions,
	PermissionSet optionalPermissions,
	PermissionSet refusedPermissions
)
public final AssemblyBuilder DefineDynamicAssembly(
	AssemblyName name,
	AssemblyBuilderAccess access,
	PermissionSet requiredPermissions,
	PermissionSet optionalPermissions,
	PermissionSet refusedPermissions
)
public final function DefineDynamicAssembly(
	name : AssemblyName, 
	access : AssemblyBuilderAccess, 
	requiredPermissions : PermissionSet, 
	optionalPermissions : PermissionSet, 
	refusedPermissions : PermissionSet
) : AssemblyBuilder

Parametri

name
Tipo: System.Reflection.AssemblyName
Identità univoca dell'assembly dinamico.
access
Tipo: System.Reflection.Emit.AssemblyBuilderAccess
Modalità in cui sarà possibile accedere all'assembly dinamico.
requiredPermissions
Tipo: System.Security.PermissionSet
Richiesta di autorizzazioni obbligatoria.
optionalPermissions
Tipo: System.Security.PermissionSet
Richiesta di autorizzazioni facoltativa.
refusedPermissions
Tipo: System.Security.PermissionSet
Richiesta di autorizzazioni rifiutata.

Valore restituito

Tipo: System.Reflection.Emit.AssemblyBuilder
Rappresenta l'assembly dinamico creato.

Implementa

_AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

EccezioneCondizione
ArgumentNullException

nameè null.

ArgumentException

La proprietà Name di name è null.

-o-

La proprietà Name di name inizia con uno spazio oppure contiene una barra o una barra rovesciata.

AppDomainUnloadedException

Si è tentato di effettuare l'operazione su un dominio dell'applicazione non caricato.

Le richieste di autorizzazione specificate per requiredPermissions, optionalPermissionse refusedPermissions non vengono utilizzate a meno che l'assembly dinamico sia stato salvato e ricaricato in memoria. Per specificare richieste di autorizzazione per un assembly temporaneo che non viene mai salvato su disco, utilizzare un overload del metodo DefineDynamicAssembly che specifica l'evidenza nonché le autorizzazioni richieste, quindi specificare un oggetto Evidence.

w0d2e42t.alert_note(it-it,VS.90).gifNota:

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile utilizzare un overload del metodo DefineDynamicAssembly che specifica evidenza e autorizzazioni, specificare l'evidenza si desidera assegnare all'assembly dinamico e includere SecurityPermissionFlag.SkipVerification nel parametro refusedPermissions. L'aggiunta di SkipVerification nel parametro refusedPermissions assicura che verrà eseguita la verifica delle istruzioni MSIL. Questa tecnica presenta una limitazione in quanto implica anche la generazione dell'eccezione SecurityException quando viene utilizzata con codice che richiede attendibilità totale.

È opportuno utilizzare questo metodo solo per definire un assembly dinamico nel dominio applicazione corrente. Per ulteriori informazioni, vedere l'overload del metodo Load(AssemblyName).

w0d2e42t.alert_note(it-it,VS.90).gifNota:

In .NET Framework versioni 1.0, 1.1 e 2.0 gli attributi di sicurezza dichiarativa applicati a un assembly dinamico utilizzando i parametri requiredPermissions, optionalPermissions e refusedPermissions vengono archiviati nel vecchio formato dei metadati XML. Vedere Creazione di attributi di sicurezza dichiarativa.

Nell'esempio riportato di seguito vengono illustrati il metodo DefineDynamicAssembly e l'evento AssemblyResolve.

Per eseguire questo esempio di codice, è necessario fornire il nome completo dell'assembly. Per informazioni sul modo in cui è possibile ottenere il nome completo dell'assembly, vedere Nomi degli assembly.

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here. 
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0
Mostra: