Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

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

Nota: questa API è ora obsoleta. L'alternativa compatibile non obsoleta è DefineDynamicAssembly.

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

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

[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
	AssemblyName name,
	AssemblyBuilderAccess access,
	string dir,
	PermissionSet requiredPermissions,
	PermissionSet optionalPermissions,
	PermissionSet refusedPermissions
)

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.
dir
Tipo: System.String
Nome della directory nella quale verrà salvato l'assembly. Se dir è null, la directory predefinita sarà la directory corrente.
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
Un assembly dinamico con nome e funzionalità specificati.

Implementa

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

EccezioneCondizione
ArgumentNullException

name è null.

ArgumentException

La proprietà Name di name è null.

- oppure -

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.

NotaNota

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 ha come limitazione il fatto che venga generata anche una classe SecurityException in caso di utilizzo con codice che richiede l'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).

NotaNota

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 l'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;
   }
}


.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0
Obsoleto (avviso del compilatore) in 4.5.2
Obsoleto (avviso del compilatore) in 4.5.1
Obsoleto (avviso del compilatore) in 4.5
Obsoleto (avviso del compilatore) in 4

.NET Framework Client Profile

Supportato in: 3.5 SP1
Obsoleto (avviso del compilatore) in 4

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

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

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft