Leggere in inglese

Condividi tramite


AppDomain.DefineDynamicAssembly Metodo

Definizione

Definisce un assembly dinamico nel dominio applicazione corrente.

Overload

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable<CustomAttributeBuilder>)
Obsoleti.

Definisce un assembly dinamico con il nome, la modalità di accesso, la directory di archiviazione, l'evidenza, le richieste di autorizzazione, l'opzione di sincronizzazione e gli attributi personalizzati specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)
Obsoleti.

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione, l'evidenza, le richieste di autorizzazione e l'opzione di sincronizzazione specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)
Obsoleti.

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione, l'evidenza e le richieste di autorizzazione specificati.

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

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione e le richieste di autorizzazione specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)
Obsoleti.

Definisce un assembly dinamico usando il nome, la modalità di accesso, l'evidenza e le richieste di autorizzazione specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable<CustomAttributeBuilder>)

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione e l'opzione di sincronizzazione specificati.

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

Definisce un assembly dinamico usando il nome, la modalità di accesso e le richieste di autorizzazione specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence)
Obsoleti.

Definisce un assembly dinamico mediante il nome, la modalità di accesso, la directory di archiviazione e l'evidenza specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>, SecurityContextSource)

Definisce un assembly dinamico con il nome, la modalità di accesso e gli attributi personalizzati specificati e usando il database di origine specificato per il contesto di sicurezza.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)

Definisce un assembly dinamico usando il nome, la modalità di accesso e la directory di archiviazione specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)
Obsoleti.

Definisce un assembly dinamico tramite il nome, la modalità di accesso e l'evidenza specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Definisce un assembly dinamico con il nome, la modalità di accesso e gli attributi personalizzati specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Definisce un assembly dinamico con nome e modalità di accesso specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable<CustomAttributeBuilder>)

Attenzione

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.

Definisce un assembly dinamico con il nome, la modalità di accesso, la directory di archiviazione, l'evidenza, le richieste di autorizzazione, l'opzione di sincronizzazione e gli attributi personalizzati specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, bool isSynchronized, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);
[System.Obsolete("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 System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, bool isSynchronized, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly dinamico. Se dir è null, viene usata la directory corrente.

evidence
Evidence

Evidenza fornita per l'assembly dinamico. L'evidenza viene usata senza modifiche come il set di evidenza finale impiegato per la risoluzione dei criteri.

requiredPermissions
PermissionSet

Richiesta di autorizzazioni obbligatoria.

optionalPermissions
PermissionSet

Richiesta di autorizzazioni facoltativa.

refusedPermissions
PermissionSet

Richiesta di autorizzazioni rifiutata.

isSynchronized
Boolean

true per sincronizzare la creazione di moduli, tipi e membri nell'assembly dinamico; in caso contrario, false.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Elenco enumerabile di attributi da applicare all'assembly oppure null se non sono presenti attributi.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Commenti

Utilizzare questo overload del metodo per specificare gli attributi che non funzionano correttamente, a meno che non vengano applicati quando viene creato un assembly dinamico. Ad esempio, gli attributi di sicurezza come SecurityTransparentAttribute e SecurityCriticalAttribute non funzionano correttamente se vengono aggiunti dopo la creazione di un assembly dinamico.

Le richieste di autorizzazione specificate per i requiredPermissionsparametri , optionalPermissionse refusedPermissions vengono usate solo se viene fornito anche il evidence parametro oppure se l'assembly dinamico viene salvato e ricaricato in memoria.

Nota

Quando si sviluppa codice che genera assembly dinamici, è consigliabile includere il SecurityPermissionFlag.SkipVerification flag nel refusedPermissions parametro . L'inclusione di questo flag garantisce che venga verificato il linguaggio MSIL (Microsoft Intermediate Language). Questa tecnica rileverà la generazione involontaria di codice non verificabile, che altrimenti è molto difficile da rilevare. Una limitazione di questa tecnica è che viene SecurityException generata anche quando viene usata con il codice che richiede l'attendibilità totale.

Solo i chiamanti completamente attendibili possono fornire prove durante la definizione di un oggetto dinamico Assembly. Il runtime esegue il mapping Evidence tramite i criteri di sicurezza per determinare le autorizzazioni concesse. I chiamanti parzialmente attendibili devono fornire null per il evidence parametro . Se evidence è null, il runtime copia i set di autorizzazioni, ovvero i set di concessione e negazione correnti, dall'assembly del chiamante all'assembly dinamico definito e contrassegna i criteri come risolti.

Se l'assembly dinamico viene salvato su disco, i carichi successivi riceveranno concessioni in base ai criteri associati al percorso in cui è stato salvato l'assembly dinamico.

Se isSynchronized è true, i metodi seguenti dell'oggetto risultante AssemblyBuilder verranno sincronizzati: DefineDynamicModule, DefineResource, GetDynamicModuleAddResourceFile, , SetEntryPointe Save. Se due di questi metodi vengono chiamati su thread diversi, uno bloccherà fino al completamento dell'altro.

Questo overload del metodo viene introdotto in .NET Framework 3.5.

Vedi anche

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.NET Framework 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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)

Attenzione

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.

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione, l'evidenza, le richieste di autorizzazione e l'opzione di sincronizzazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, bool isSynchronized);
[System.Obsolete("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 System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, bool isSynchronized);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly dinamico. Se dir è null, la directory predefinita sarà la directory corrente.

evidence
Evidence

Evidenza fornita per l'assembly dinamico. L'evidenza viene usata senza modifiche come il set di evidenza finale impiegato per la risoluzione dei criteri.

requiredPermissions
PermissionSet

Richiesta di autorizzazioni obbligatoria.

optionalPermissions
PermissionSet

Richiesta di autorizzazioni facoltativa.

refusedPermissions
PermissionSet

Richiesta di autorizzazioni rifiutata.

isSynchronized
Boolean

true per sincronizzare la creazione di moduli, tipi e membri nell'assembly dinamico; in caso contrario, false.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio seguente viene illustrato il metodo e AssemblyResolve l'evento DefineDynamicAssembly .

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly. Per informazioni su come ottenere il nome completo dell'assembly, vedere Nomi assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Le richieste di autorizzazione specificate per requiredPermissions, optionalPermissionse refusedPermissions vengono usate solo se evidence viene fornito anche oppure se l'assembly dinamico viene salvato e ricaricato in memoria.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel refusedPermissions parametro garantisce che venga verificato il codice MSIL. Una limitazione di questa tecnica è che viene SecurityException generata anche quando viene usata con codice che richiede l'attendibilità totale.

Solo i chiamanti completamente attendibili possono fornire le proprie prove durante la definizione di un oggetto dinamico Assembly. Il runtime eseguirà Evidence il mapping di tramite i criteri di sicurezza per determinare le autorizzazioni concesse. I chiamanti parzialmente attendibili devono fornire null per il evidence parametro . Se evidence è null, il runtime copia i set di autorizzazioni, ovvero i set di concessione e negazione correnti, dal chiamante Assembly al dinamico Assembly definito e contrassegna i criteri come risolti.

Se il dinamico Assembly viene salvato su disco, i caricamenti successivi riceveranno concessioni in base ai criteri associati al percorso in cui è stato salvato .Assembly

Se isSynchronized è true, i metodi seguenti dell'oggetto risultante AssemblyBuilder verranno sincronizzati: DefineDynamicModule, DefineResource, GetDynamicModuleAddResourceFile, , SetEntryPointe Save. Se due di questi metodi vengono chiamati su thread diversi, uno bloccherà fino al completamento dell'altro.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)

Attenzione

Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione, l'evidenza e le richieste di autorizzazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly. Se dir è null, la directory predefinita sarà la directory corrente.

evidence
Evidence

Evidenza fornita per l'assembly dinamico. L'evidenza viene usata senza modifiche come il set di evidenza finale impiegato per la risoluzione dei criteri.

requiredPermissions
PermissionSet

Richiesta di autorizzazioni obbligatoria.

optionalPermissions
PermissionSet

Richiesta di autorizzazioni facoltativa.

refusedPermissions
PermissionSet

Richiesta di autorizzazioni rifiutata.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio seguente viene illustrato il metodo e AssemblyResolve l'evento DefineDynamicAssembly .

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly. Per informazioni su come ottenere il nome completo dell'assembly, vedere Nomi assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Le richieste di autorizzazione specificate per requiredPermissions, optionalPermissionse refusedPermissions vengono usate solo se evidence vengono fornite o se l'assembly dinamico viene salvato e ricaricato in memoria.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel parametro garantisce che l'MSIL refusedPermissions venga verificato. Una limitazione di questa tecnica è che causa SecurityException anche la generazione di quando viene usata con codice che richiede l'attendibilità completa.

Solo i chiamanti completamente attendibili possono fornire i propri evidence quando si definisce un oggetto dinamico Assembly. Il runtime esegue il mapping tramite i Evidence criteri di sicurezza per determinare le autorizzazioni concesse. I chiamanti parzialmente attendibili devono fornire un valore Null evidence. Se evidence è null, il runtime copia i set di autorizzazioni, ovvero la concessione corrente e i set di negazioni, dal chiamante Assembly al Assembly criterio dinamico definito e contrassegna i criteri come risolti.

Se il carico dinamico Assembly viene salvato su disco, i carichi successivi riceveranno le concessioni in base ai criteri associati alla posizione in cui è stato salvato.Assembly

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

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

Attenzione

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.

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione e le richieste di autorizzazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
[System.Obsolete("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 System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly. Se dir è null, la directory predefinita sarà la directory corrente.

requiredPermissions
PermissionSet

Richiesta di autorizzazioni obbligatoria.

optionalPermissions
PermissionSet

Richiesta di autorizzazioni facoltativa.

refusedPermissions
PermissionSet

Richiesta di autorizzazioni rifiutata.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

L'esempio seguente illustra il metodo e AssemblyResolve l'eventoDefineDynamicAssembly.

Per eseguire questo esempio di codice, è necessario specificare il nome dell'assembly completo. Per informazioni su come ottenere il nome dell'assembly completo, vedere Nomi di assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

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

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile usare un overload del DefineDynamicAssembly metodo che specifica l'evidenza e le autorizzazioni, fornire le prove che si desidera che l'assembly dinamico abbia e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel parametro garantisce che l'MSIL refusedPermissions venga verificato. Una limitazione di questa tecnica è che causa SecurityException anche la generazione di quando viene usata con codice che richiede l'attendibilità completa.

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)

Attenzione

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.

Definisce un assembly dinamico usando il nome, la modalità di accesso, l'evidenza e le richieste di autorizzazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
[System.Obsolete("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 System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

evidence
Evidence

Evidenza fornita per l'assembly dinamico. L'evidenza viene usata senza modifiche come il set di evidenza finale impiegato per la risoluzione dei criteri.

requiredPermissions
PermissionSet

Richiesta di autorizzazioni obbligatoria.

optionalPermissions
PermissionSet

Richiesta di autorizzazioni facoltativa.

refusedPermissions
PermissionSet

Richiesta di autorizzazioni rifiutata.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

L'esempio seguente illustra il metodo e AssemblyResolve l'eventoDefineDynamicAssembly.

Per eseguire questo esempio di codice, è necessario specificare il nome dell'assembly completo. Per informazioni su come ottenere il nome dell'assembly completo, vedere Nomi di assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Le richieste di autorizzazione specificate per requiredPermissions, optionalPermissionse refusedPermissions vengono usate solo se evidence vengono fornite o se l'assembly dinamico viene salvato e ricaricato in memoria.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel parametro garantisce che l'MSIL refusedPermissions venga verificato. Una limitazione di questa tecnica è che causa SecurityException anche la generazione di quando viene usata con codice che richiede l'attendibilità completa.

Solo i chiamanti completamente attendibili possono fornire i propri evidence quando si definisce un oggetto dinamico Assembly. Il runtime esegue il mapping tramite i Evidence criteri di sicurezza per determinare le autorizzazioni concesse. I chiamanti parzialmente attendibili devono fornire un valore Null evidence. Se evidence è null, il runtime copia i set di autorizzazioni, ovvero la concessione corrente e i set di negazioni, dal chiamante Assembly al Assembly criterio dinamico definito e contrassegna i criteri come risolti.

Se il carico dinamico Assembly viene salvato su disco, i carichi successivi riceveranno le concessioni in base ai criteri associati alla posizione in cui è stato salvato.Assembly

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable<CustomAttributeBuilder>)

Definisce un assembly dinamico usando il nome, la modalità di accesso, la directory di archiviazione e l'opzione di sincronizzazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, bool isSynchronized, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly dinamico. Se dir è null, viene usata la directory corrente.

isSynchronized
Boolean

true per sincronizzare la creazione di moduli, tipi e membri nell'assembly dinamico; in caso contrario, false.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Elenco enumerabile di attributi da applicare all'assembly oppure null se non sono presenti attributi.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Commenti

Usare questo overload di metodo per specificare gli attributi che non funzionano correttamente a meno che non vengano applicati quando viene creato un assembly dinamico. Ad esempio, gli attributi di sicurezza come SecurityTransparentAttribute e SecurityCriticalAttribute non funzionano correttamente se vengono aggiunti dopo la creazione di un assembly dinamico.

Se isSynchronized è true, i metodi seguenti dell'oggetto risultante AssemblyBuilder verranno sincronizzati: DefineDynamicModule, AddResourceFileSetEntryPointDefineResourceGetDynamicModule, e .Save Se due di questi metodi vengono chiamati su thread diversi, uno bloccherà fino al completamento dell'altro.

Vedi anche

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.NET Framework 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

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

Attenzione

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.

Definisce un assembly dinamico usando il nome, la modalità di accesso e le richieste di autorizzazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
[System.Obsolete("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 System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

requiredPermissions
PermissionSet

Richiesta di autorizzazioni obbligatoria.

optionalPermissions
PermissionSet

Richiesta di autorizzazioni facoltativa.

refusedPermissions
PermissionSet

Richiesta di autorizzazioni rifiutata.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

L'esempio seguente illustra il metodo e AssemblyResolve l'eventoDefineDynamicAssembly.

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly. Per informazioni su come ottenere il nome completo dell'assembly, vedere Nomi assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

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

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile usare un overload del DefineDynamicAssembly metodo che specifica l'evidenza e le autorizzazioni, fornire l'evidenza che si vuole che l'assembly dinamico abbia e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel refusedPermissions parametro garantisce che venga verificato il codice MSIL. Una limitazione di questa tecnica è che viene SecurityException generata anche quando viene usata con codice che richiede l'attendibilità totale.

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo .

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence)

Attenzione

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.

Definisce un assembly dinamico mediante il nome, la modalità di accesso, la directory di archiviazione e l'evidenza specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence);
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly. Se dir è null, la directory predefinita sarà la directory corrente.

evidence
Evidence

Evidenza fornita per l'assembly dinamico. L'evidenza viene usata senza modifiche come il set di evidenza finale impiegato per la risoluzione dei criteri.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio seguente viene illustrato il metodo e AssemblyResolve l'evento DefineDynamicAssembly .

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly. Per informazioni su come ottenere il nome completo dell'assembly, vedere Nomi assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Solo i chiamanti completamente attendibili possono fornire i relativi evidence dati durante la definizione di un oggetto dinamico Assembly. Il runtime eseguirà Evidence il mapping di tramite i criteri di sicurezza per determinare le autorizzazioni concesse. I chiamanti parzialmente attendibili devono fornire un valore Null evidence. Se evidence è null, il runtime copia i set di autorizzazioni, ovvero i set di concessione e negazione correnti, dal chiamante Assembly al dinamico Assembly definito e contrassegna i criteri come risolti.

Se il dinamico Assembly viene salvato su disco, i caricamenti successivi riceveranno concessioni in base ai criteri associati al percorso in cui è stato salvato .Assembly

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile usare un overload del DefineDynamicAssembly metodo che specifica l'evidenza e le autorizzazioni, fornire l'evidenza che si vuole che l'assembly dinamico abbia e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel refusedPermissions parametro garantisce che venga verificato il codice MSIL. Una limitazione di questa tecnica è che viene SecurityException generata anche quando viene usata con codice che richiede l'attendibilità totale.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>, SecurityContextSource)

Definisce un assembly dinamico con il nome, la modalità di accesso e gli attributi personalizzati specificati e usando il database di origine specificato per il contesto di sicurezza.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes, System.Security.SecurityContextSource securityContextSource);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità di accesso per l'assembly dinamico.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Elenco enumerabile di attributi da applicare all'assembly oppure null se non sono presenti attributi.

securityContextSource
SecurityContextSource

Origine del contesto di sicurezza.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Il valore di securityContextSource non è uno dei valori di enumerazione.

Commenti

Utilizzare questo overload del metodo per specificare gli attributi che non funzionano correttamente, a meno che non vengano applicati quando viene creato un assembly dinamico. Ad esempio, gli attributi di sicurezza come SecurityTransparentAttribute e SecurityCriticalAttribute non funzionano correttamente se vengono aggiunti dopo la creazione di un assembly dinamico.

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni su questa restrizione, vedere l'overload del Load(AssemblyName) metodo.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.NET Framework 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

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)

Definisce un assembly dinamico usando il nome, la modalità di accesso e la directory di archiviazione specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

dir
String

Nome della directory nella quale verrà salvato l'assembly. Se dir è null, la directory predefinita sarà la directory corrente.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio seguente viene illustrato il metodo e AssemblyResolve l'evento DefineDynamicAssembly .

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly. Per informazioni su come ottenere il nome completo dell'assembly, vedere Nomi assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile usare un overload del DefineDynamicAssembly metodo che specifica l'evidenza e le autorizzazioni, fornire l'evidenza che si vuole che l'assembly dinamico abbia e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel refusedPermissions parametro garantisce che venga verificato il codice MSIL. Una limitazione di questa tecnica è che viene SecurityException generata anche quando viene usata con codice che richiede l'attendibilità totale.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.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

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)

Attenzione

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.

Definisce un assembly dinamico tramite il nome, la modalità di accesso e l'evidenza specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.Policy.Evidence evidence);
[System.Obsolete("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 System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.Policy.Evidence evidence);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità mediante cui si accederà all'assembly dinamico.

evidence
Evidence

Evidenza fornita per l'assembly dinamico. L'evidenza viene usata senza modifiche come il set di evidenza finale impiegato per la risoluzione dei criteri.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Implementazioni

Attributi

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio seguente viene illustrato il DefineDynamicAssembly metodo e l'evento AssemblyResolve .

In primo luogo, l'esempio di codice tenta di creare un'istanza di MyDynamicType chiamando il CreateInstance metodo con un nome di assembly non valido e rileva l'eccezione risultante.

Nell'esempio di codice viene quindi aggiunto un gestore eventi per l'evento AssemblyResolve e si tenta nuovamente di creare un'istanza diMyDynamicType . Durante la chiamata a CreateInstance, viene generato l'evento AssemblyResolve per l'assembly non valido. Il gestore eventi crea un assembly dinamico che contiene un tipo denominato MyDynamicType, assegna al tipo un costruttore senza parametri e restituisce il nuovo assembly dinamico. La chiamata a CreateInstance termina correttamente e il costruttore per MyDynamicType visualizza un messaggio nella console.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Solo i chiamanti completamente attendibili possono fornire i propri evidence quando si definisce un oggetto dinamico Assembly. Il runtime esegue il mapping tramite i Evidence criteri di sicurezza per determinare le autorizzazioni concesse. I chiamanti parzialmente attendibili devono fornire un valore Null evidence. Se evidence è null, il runtime copia i set di autorizzazioni, ovvero la concessione corrente e i set di negazioni, dal chiamante Assembly al Assembly criterio dinamico definito e contrassegna i criteri come risolti.

Se il carico dinamico Assembly viene salvato su disco, i carichi successivi riceveranno le concessioni in base ai criteri associati alla posizione in cui è stato salvato.Assembly

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile usare un overload del DefineDynamicAssembly metodo che specifica l'evidenza e le autorizzazioni, fornire le prove che si desidera che l'assembly dinamico abbia e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel parametro garantisce che l'MSIL refusedPermissions venga verificato. Una limitazione di questa tecnica è che causa SecurityException anche la generazione di quando viene usata con codice che richiede l'attendibilità completa.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni (Obsoleto)
.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)

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Definisce un assembly dinamico con il nome, la modalità di accesso e gli attributi personalizzati specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità di accesso per l'assembly dinamico.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Elenco enumerabile di attributi da applicare all'assembly oppure null se non sono presenti attributi.

Restituisce

Assembly dinamico con nome e funzionalità specificati.

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio SecurityTransparentAttributedi codice seguente viene illustrato come creare un assembly dinamico con . L'attributo deve essere specificato come elemento di una matrice di CustomAttributeBuilder oggetti.

Il primo passaggio della creazione CustomAttributeBuilder consiste nel ottenere un costruttore per l'attributo. Il costruttore non ha parametri, quindi il GetConstructor metodo viene chiamato con una matrice vuota di Type oggetti per rappresentare i tipi dei parametri. Il secondo passaggio consiste nel passare l'oggetto risultante ConstructorInfo al costruttore per la CustomAttributeBuilder classe, insieme a una matrice vuota di tipo Object per rappresentare gli argomenti.

Il risultato CustomAttributeBuilder viene quindi passato al DefineDynamicAssembly metodo come unico elemento di una matrice.

Il codice di esempio definisce un modulo e un tipo nel nuovo assembly dinamico e quindi visualizza gli attributi dell'assembly.

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

class CustomAttributeBuilderSnippet
{
    static void Main()
    {
        // Create a CustomAttributeBuilder for the assembly attribute.
        //
        // SecurityTransparentAttribute has a parameterless constructor,
        // which is retrieved by passing an array of empty types for the
        // constructor's parameter types. The CustomAttributeBuilder is
        // then created by passing the ConstructorInfo and an empty array
        // of objects to represent the parameters.
        //
        ConstructorInfo transparentCtor =
            typeof(SecurityTransparentAttribute).GetConstructor(
                Type.EmptyTypes);
        CustomAttributeBuilder transparent = new CustomAttributeBuilder(
            transparentCtor,
            new Object[] {} );

        // Create a dynamic assembly using the attribute. The attribute is
        // passed as an array with one element.
        AssemblyName aName = new AssemblyName("EmittedAssembly");
        AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
            aName,
            AssemblyBuilderAccess.Run,
            new CustomAttributeBuilder[] { transparent } );

        ModuleBuilder mb = ab.DefineDynamicModule( aName.Name );
        TypeBuilder tb = mb.DefineType(
            "MyDynamicType",
            TypeAttributes.Public );
        tb.CreateType();

        Console.WriteLine("{0}\nAssembly attributes:", ab);
        foreach (Attribute attr in ab.GetCustomAttributes(true))
        {
            Console.WriteLine("\t{0}", attr);
        }
    }
}

/* This code example produces the following output:

EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Assembly attributes:
        System.Security.SecurityTransparentAttribute
 */

Commenti

Usare questo overload di metodo per specificare gli attributi che non funzionano correttamente a meno che non vengano applicati quando viene creato un assembly dinamico. Ad esempio, gli attributi di sicurezza come SecurityTransparentAttribute e SecurityCriticalAttribute non funzionano correttamente se vengono aggiunti dopo la creazione di un assembly dinamico.

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni su questa restrizione, vedere l'overload del Load(AssemblyName) metodo.

Questo overload di metodo viene introdotto in .NET Framework 3.5.

Vedi anche

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.NET Framework 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

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Definisce un assembly dinamico con nome e modalità di accesso specificati.

public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access);

Parametri

name
AssemblyName

Identità univoca dell'assembly dinamico.

access
AssemblyBuilderAccess

Modalità di accesso per l'assembly dinamico.

Restituisce

Assembly dinamico con il nome e la modalità di accesso specificati.

Implementazioni

Eccezioni

name è null.

La proprietà Name di name è null.

-oppure-

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

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

L'esempio seguente illustra il metodo e AssemblyResolve l'eventoDefineDynamicAssembly.

Per eseguire questo esempio di codice, è necessario specificare il nome dell'assembly completo. Per informazioni su come ottenere il nome dell'assembly completo, vedere Nomi di assembly.

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

class DefinedDynamicAssemblySnippet {
   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;
   }
}

Commenti

Questo metodo deve essere usato solo per definire un assembly dinamico nel dominio applicazione corrente. Per altre informazioni, vedere l'overload del Load(AssemblyName) metodo.

Nota

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile usare un overload del DefineDynamicAssembly metodo che specifica l'evidenza e le autorizzazioni, fornire le prove che si desidera che l'assembly dinamico abbia e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. L'inclusione SkipVerification nel parametro garantisce che l'MSIL refusedPermissions venga verificato. Una limitazione di questa tecnica è che causa SecurityException anche la generazione di quando viene usata con codice che richiede l'attendibilità completa.

Si applica a

.NET Framework 4.8.1 e altre versioni
Prodotto Versioni
.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