AppDomain.DefineDynamicAssembly Methode

Definition

Definiert eine dynamische Assembly in der aktuellen Anwendungsdomäne.Defines a dynamic assembly in the current application domain.

Überlädt

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis, Beweis sowie der angegebenen Synchronisierungsoption und den angegebenen Berechtigungsanforderungen und benutzerdefinierten Attributen.Defines a dynamic assembly with the specified name, access mode, storage directory, evidence, permission requests, synchronization option, and custom attributes.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis, Beweis sowie der angegebenen Synchronisierungsoption und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, permission requests, and synchronization option.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis, Beweis und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, and permission requests.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, storage directory, and permission requests.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Beweis und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, evidence, and permission requests.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis und der Synchronisierungsoption.Defines a dynamic assembly using the specified name, access mode, storage directory, and synchronization option.

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

Definiert eine dynamische Assembly mit dem angegebenem Namen, Zugriffsmodus und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, and permission requests.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence)

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis und Beweis.Defines a dynamic assembly using the specified name, access mode, storage directory, and evidence.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und benutzerdefinierten Attributen und verwendet die angegebene Quelle für den Sicherheitskontext.Defines a dynamic assembly with the specified name, access mode, and custom attributes, and using the specified source for its security context.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und Speicherverzeichnis.Defines a dynamic assembly using the specified name, access mode, and storage directory.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und Beweis.Defines a dynamic assembly using the specified name, access mode, and evidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und benutzerdefinierten Attributen.Defines a dynamic assembly with the specified name, access mode, and custom attributes.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Definiert eine dynamische Assembly mit dem angegebenen Namen und Zugriffsmodus.Defines a dynamic assembly with the specified name and access mode.

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

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis, Beweis sowie der angegebenen Synchronisierungsoption und den angegebenen Berechtigungsanforderungen und benutzerdefinierten Attributen.Defines a dynamic assembly with the specified name, access mode, storage directory, evidence, permission requests, synchronization option, and custom attributes.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::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("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet * bool * seq<System.Reflection.Emit.CustomAttributeBuilder> -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die dynamische Assembly gespeichert wird.The name of the directory where the dynamic assembly will be saved. Wenn dir den Wert null hat, wird das aktuelle Verzeichnis verwendet.If dir is null, the current directory is used.

evidence
Evidence

Der für die dynamische Assembly angegebene Beweis.The evidence that is supplied for the dynamic assembly. Der Beweis wird ohne Änderungen als endgültiger Satz von Beweisen für die Richtlinienauflösung verwendet.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

Die erforderliche Berechtigungsanforderung.The required permissions request.

optionalPermissions
PermissionSet

Die optionale Berechtigungsanforderung.The optional permissions request.

refusedPermissions
PermissionSet

Die verweigerte Berechtigungsanforderung.The refused permissions request.

isSynchronized
Boolean

true, wenn das Erstellen von Modulen, Typen und Membern der dynamischen Assembly synchronisiert werden soll, andernfalls false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Eine aufzählbare Liste von Attributen, die auf die Assembly angewendet werden sollen, oder null, wenn keine Attribute vorhanden sind.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit Leerraum, oder sie enthält einen Schrägstrich bzw. einen umgekehrten Schrägstrich.The Name property of name starts with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Hinweise

Verwenden Sie diese Methoden Überladung, um Attribute anzugeben, die nicht ordnungsgemäß funktionieren, wenn Sie beim Erstellen einer dynamischen Assembly angewendet werden.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Beispielsweise funktionieren Sicherheits Attribute wie SecurityTransparentAttribute und SecurityCriticalAttribute nicht ordnungsgemäß, wenn Sie nach dem Erstellen einer dynamischen Assembly hinzugefügt werden.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Die für den requiredPermissions-, optionalPermissions-und refusedPermissions-Parameter angegebenen Berechtigungsanforderungen werden nur verwendet, wenn der evidence Parameter ebenfalls bereitgestellt wird oder wenn die dynamische Assembly gespeichert und in den Arbeitsspeicher geladen wird.The permission requests specified for the requiredPermissions, optionalPermissions, and refusedPermissions parameters are used only if the evidence parameter is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Hinweis

Wenn Sie Code entwickeln, der dynamische Assemblys ausgibt, empfiehlt es sich, dass Sie das SecurityPermissionFlag.SkipVerification-Flag in den refusedPermissions-Parameter einschließen.When you develop code that emits dynamic assemblies, we recommend that you include the SecurityPermissionFlag.SkipVerification flag in the refusedPermissions parameter. Durch die Einbindung dieses Flags wird sichergestellt, dass die MSIL (Microsoft Intermediate Language) überprüft wird.The inclusion of this flag ensures that the Microsoft intermediate language (MSIL) will be verified. Mit dieser Methode wird die unbeabsichtigte Generierung von nicht überprüfbarem Code erkannt, der andernfalls sehr schwer zu erkennen ist.This technique will detect the unintentional generation of unverifiable code, which otherwise is very difficult to detect. Eine Einschränkung dieses Verfahrens besteht darin, dass auch SecurityException ausgelöst wird, wenn es mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when it is used with code that demands full trust.

Nur voll vertrauenswürdige Aufrufer können beim Definieren einer dynamischen AssemblyBeweise liefern.Only fully trusted callers can supply evidence when defining a dynamic Assembly. Die Laufzeit ordnet die Evidence über die Sicherheitsrichtlinie zu, um die gewährten Berechtigungen zu bestimmen.The runtime maps the Evidence through the security policy to determine the granted permissions. Teilweise vertrauenswürdige Aufrufer müssen null für den evidence-Parameter angeben.Partially trusted callers must supply null for the evidence parameter. Wenn evidence nullist, kopiert die Runtime die Berechtigungs Sätze (d. h. die aktuellen Grant-und Deny-Sätze) aus der Assembly des Aufrufers in die dynamische Assembly, die definiert wird, und markiert die Richtlinie als aufgelöst.If evidence is null, the runtime copies the permission sets (that is, the current grant and deny sets) from the caller's assembly to the dynamic assembly that is being defined, and marks the policy as resolved.

Wenn die dynamische Assembly auf dem Datenträger gespeichert wird, erhalten nachfolgende Lasten Zuweisungen auf der Grundlage von Richtlinien, die dem Speicherort zugeordnet sind, an dem die dynamische Assembly gespeichert wurde.If the dynamic assembly is saved to disk, subsequent loads will get grants based on policies that are associated with the location where the dynamic assembly was saved.

Wenn isSynchronized trueist, werden die folgenden Methoden der resultierenden AssemblyBuilder synchronisiert: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPointund Save.If isSynchronized is true, the following methods of the resulting AssemblyBuilder will be synchronized: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPoint, and Save. Wenn zwei dieser Methoden für verschiedene Threads aufgerufen werden, wird eine blockiert, bis der andere Vorgang abgeschlossen ist.If two of these methods are called on different threads, one will block until the other is completed.

Diese Methoden Überladung wird in der .NET Framework 3,5.NET Framework 3.5eingeführt.This method overload is introduced in the .NET Framework 3,5.NET Framework 3.5.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

Siehe auch

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

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis, Beweis sowie der angegebenen Synchronisierungsoption und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, permission requests, and synchronization option.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions, bool isSynchronized);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet * bool -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die dynamische Assembly gespeichert wird.The name of the directory where the dynamic assembly will be saved. Wenn dirnull ist, wird das aktuelle Verzeichnis als Standardverzeichnis verwendet.If dir is null, the directory defaults to the current directory.

evidence
Evidence

Der für die dynamische Assembly angegebene Beweis.The evidence supplied for the dynamic assembly. Der Beweis wird ohne Änderungen als endgültiger Satz von Beweisen für die Richtlinienauflösung verwendet.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

Die erforderliche Berechtigungsanforderung.The required permissions request.

optionalPermissions
PermissionSet

Die optionale Berechtigungsanforderung.The optional permissions request.

refusedPermissions
PermissionSet

Die verweigerte Berechtigungsanforderung.The refused permissions request.

isSynchronized
Boolean

true, wenn das Erstellen von Modulen, Typen und Membern der dynamischen Assembly synchronisiert werden soll, andernfalls false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Die für requiredPermissions, optionalPermissionsund refusedPermissions angegebenen Berechtigungsanforderungen werden nur verwendet, wenn evidence ebenfalls bereitgestellt wird oder wenn die dynamische Assembly gespeichert und in den Arbeitsspeicher geladen wird.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are used only if evidence is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, wird empfohlen, dass Sie SecurityPermissionFlag.SkipVerification in refusedPermissionseinschließen.During the development of code that emits dynamic assemblies, it is recommended that you include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Nur voll vertrauenswürdige Aufrufer können Ihren Beweis angeben, wenn Sie eine dynamische Assemblydefinieren.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. Die Laufzeit ordnet die Evidence über die Sicherheitsrichtlinie zu, um die gewährten Berechtigungen zu bestimmen.The runtime will map the Evidence through the security policy to determine the granted permissions. Teilweise vertrauenswürdige Aufrufer müssen null für den evidence-Parameter angeben.Partially trusted callers must supply null for the evidence parameter. Wenn evidence nullist, kopiert die Runtime die Berechtigungs Sätze, d. h. die aktuellen Grant-und Ablehnungs Sätze, von der Assembly des Aufrufers in den dynamischen Assembly, der definiert wird, und markiert die Richtlinie als aufgelöst.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Wenn die dynamische Assembly auf dem Datenträger gespeichert wird, erhalten nachfolgende Lasten Zuweisungen basierend auf den Richtlinien, die dem Speicherort zugeordnet sind, an dem die Assembly gespeichert wurde.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Wenn isSynchronized trueist, werden die folgenden Methoden der resultierenden AssemblyBuilder synchronisiert: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPointund Save.If isSynchronized is true, the following methods of the resulting AssemblyBuilder will be synchronized: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPoint, and Save. Wenn zwei dieser Methoden für verschiedene Threads aufgerufen werden, wird eine blockiert, bis der andere Vorgang abgeschlossen ist.If two of these methods are called on different threads, one will block until the other completes.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

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

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis, Beweis und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, and permission requests.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die Assembly gespeichert wird.The name of the directory where the assembly will be saved. Wenn dirnull ist, wird das aktuelle Verzeichnis als Standardverzeichnis verwendet.If dir is null, the directory defaults to the current directory.

evidence
Evidence

Der für die dynamische Assembly angegebene Beweis.The evidence supplied for the dynamic assembly. Der Beweis wird ohne Änderungen als endgültiger Satz von Beweisen für die Richtlinienauflösung verwendet.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

Die erforderliche Berechtigungsanforderung.The required permissions request.

optionalPermissions
PermissionSet

Die optionale Berechtigungsanforderung.The optional permissions request.

refusedPermissions
PermissionSet

Die verweigerte Berechtigungsanforderung.The refused permissions request.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Die für requiredPermissions, optionalPermissionsund refusedPermissions angegebenen Berechtigungsanforderungen werden nur verwendet, wenn evidence ebenfalls bereitgestellt wird oder wenn die dynamische Assembly gespeichert und in den Arbeitsspeicher geladen wird.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are used only if evidence is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, wird empfohlen, dass Sie SecurityPermissionFlag.SkipVerification in refusedPermissionseinschließen.During the development of code that emits dynamic assemblies, it is recommended that you include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Nur voll vertrauenswürdige Aufrufer können Ihre evidence bereitstellen, wenn Sie eine dynamische Assemblydefinieren.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. Die Laufzeit ordnet die Evidence über die Sicherheitsrichtlinie zu, um die gewährten Berechtigungen zu bestimmen.The runtime will map the Evidence through the security policy to determine the granted permissions. Teilweise vertrauenswürdige Aufrufer müssen einen NULL-evidencebereitstellen.Partially trusted callers must supply a null evidence. Wenn evidence nullist, kopiert die Runtime die Berechtigungs Sätze, d. h. die aktuellen Grant-und Ablehnungs Sätze, von der Assembly des Aufrufers in den dynamischen Assembly, der definiert wird, und markiert die Richtlinie als aufgelöst.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Wenn die dynamische Assembly auf dem Datenträger gespeichert wird, erhalten nachfolgende Lasten Zuweisungen basierend auf den Richtlinien, die dem Speicherort zugeordnet sind, an dem die Assembly gespeichert wurde.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

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

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, storage directory, and permission requests.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, dir As String, requiredPermissions As PermissionSet, optionalPermissions As PermissionSet, refusedPermissions As PermissionSet) As AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die Assembly gespeichert wird.The name of the directory where the assembly will be saved. Wenn dirnull ist, wird das aktuelle Verzeichnis als Standardverzeichnis verwendet.If dir is null, the directory defaults to the current directory.

requiredPermissions
PermissionSet

Die erforderliche Berechtigungsanforderung.The required permissions request.

optionalPermissions
PermissionSet

Die optionale Berechtigungsanforderung.The optional permissions request.

refusedPermissions
PermissionSet

Die verweigerte Berechtigungsanforderung.The refused permissions request.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Die für requiredPermissions, optionalPermissionsund refusedPermissions angegebenen Berechtigungsanforderungen werden nur verwendet, wenn die dynamische Assembly gespeichert und in den Arbeitsspeicher geladen wurde.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are not used unless the dynamic assembly has been saved and reloaded into memory. Zum Angeben von Berechtigungsanforderungen für eine vorübergehende Assembly, die nie auf dem Datenträger gespeichert wird, verwenden Sie eine Überladung der DefineDynamicAssembly Methode, die Beweise sowie angeforderte Berechtigungen angibt, und stellen ein Evidence Objekt bereit.To specify permission requests for a transient assembly that is never saved to disk, use an overload of the DefineDynamicAssembly method that specifies evidence as well as requested permissions, and supply an Evidence object.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, empfiehlt es sich, eine Überladung der DefineDynamicAssembly-Methode zu verwenden, die Beweise und Berechtigungen angibt, den Beweis bereitzustellen, den die dynamische Assembly enthalten soll, und SecurityPermissionFlag.SkipVerification in refusedPermissionseinzubeziehen.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

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

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Beweis und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, evidence, and permission requests.

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("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

evidence
Evidence

Der für die dynamische Assembly angegebene Beweis.The evidence supplied for the dynamic assembly. Der Beweis wird ohne Änderungen als endgültiger Satz von Beweisen für die Richtlinienauflösung verwendet.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

Die erforderliche Berechtigungsanforderung.The required permissions request.

optionalPermissions
PermissionSet

Die optionale Berechtigungsanforderung.The optional permissions request.

refusedPermissions
PermissionSet

Die verweigerte Berechtigungsanforderung.The refused permissions request.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Die für requiredPermissions, optionalPermissionsund refusedPermissions angegebenen Berechtigungsanforderungen werden nur verwendet, wenn evidence ebenfalls bereitgestellt wird oder wenn die dynamische Assembly gespeichert und in den Arbeitsspeicher geladen wird.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are used only if evidence is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, wird empfohlen, dass Sie SecurityPermissionFlag.SkipVerification in refusedPermissionseinschließen.During the development of code that emits dynamic assemblies, it is recommended that you include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Nur voll vertrauenswürdige Aufrufer können Ihre evidence bereitstellen, wenn Sie eine dynamische Assemblydefinieren.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. Die Laufzeit ordnet die Evidence über die Sicherheitsrichtlinie zu, um die gewährten Berechtigungen zu bestimmen.The runtime will map the Evidence through the security policy to determine the granted permissions. Teilweise vertrauenswürdige Aufrufer müssen einen NULL-evidencebereitstellen.Partially trusted callers must supply a null evidence. Wenn evidence nullist, kopiert die Runtime die Berechtigungs Sätze, d. h. die aktuellen Grant-und Ablehnungs Sätze, von der Assembly des Aufrufers in den dynamischen Assembly, der definiert wird, und markiert die Richtlinie als aufgelöst.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Wenn die dynamische Assembly auf dem Datenträger gespeichert wird, erhalten nachfolgende Lasten Zuweisungen basierend auf den Richtlinien, die dem Speicherort zugeordnet sind, an dem die Assembly gespeichert wurde.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis und der Synchronisierungsoption.Defines a dynamic assembly using the specified name, access mode, storage directory, and synchronization option.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, bool isSynchronized, System::Collections::Generic::IEnumerable<System::Reflection::Emit::CustomAttributeBuilder ^> ^ assemblyAttributes);
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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * bool * seq<System.Reflection.Emit.CustomAttributeBuilder> -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, dir As String, isSynchronized As Boolean, assemblyAttributes As IEnumerable(Of CustomAttributeBuilder)) As AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die dynamische Assembly gespeichert wird.The name of the directory where the dynamic assembly will be saved. Wenn dir den Wert null hat, wird das aktuelle Verzeichnis verwendet.If dir is null, the current directory is used.

isSynchronized
Boolean

true, wenn das Erstellen von Modulen, Typen und Membern der dynamischen Assembly synchronisiert werden soll, andernfalls false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Eine aufzählbare Liste von Attributen, die auf die Assembly angewendet werden sollen, oder null, wenn keine Attribute vorhanden sind.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit Leerraum, oder sie enthält einen Schrägstrich bzw. einen umgekehrten Schrägstrich.The Name property of name starts with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Hinweise

Verwenden Sie diese Methoden Überladung, um Attribute anzugeben, die nicht ordnungsgemäß funktionieren, wenn Sie beim Erstellen einer dynamischen Assembly angewendet werden.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Beispielsweise funktionieren Sicherheits Attribute wie SecurityTransparentAttribute und SecurityCriticalAttribute nicht ordnungsgemäß, wenn Sie nach dem Erstellen einer dynamischen Assembly hinzugefügt werden.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Wenn isSynchronized trueist, werden die folgenden Methoden der resultierenden AssemblyBuilder synchronisiert: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPointund Save.If isSynchronized is true, the following methods of the resulting AssemblyBuilder will be synchronized: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPoint, and Save. Wenn zwei dieser Methoden für verschiedene Threads aufgerufen werden, wird eine blockiert, bis der andere Vorgang abgeschlossen ist.If two of these methods are called on different threads, one will block until the other is completed.

Siehe auch

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

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenem Namen, Zugriffsmodus und den angegebenen Berechtigungsanforderungen.Defines a dynamic assembly using the specified name, access mode, and permission requests.

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("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, requiredPermissions As PermissionSet, optionalPermissions As PermissionSet, refusedPermissions As PermissionSet) As AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

requiredPermissions
PermissionSet

Die erforderliche Berechtigungsanforderung.The required permissions request.

optionalPermissions
PermissionSet

Die optionale Berechtigungsanforderung.The optional permissions request.

refusedPermissions
PermissionSet

Die verweigerte Berechtigungsanforderung.The refused permissions request.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Die für requiredPermissions, optionalPermissionsund refusedPermissions angegebenen Berechtigungsanforderungen werden nur verwendet, wenn die dynamische Assembly gespeichert und in den Arbeitsspeicher geladen wurde.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are not used unless the dynamic assembly has been saved and reloaded into memory. Zum Angeben von Berechtigungsanforderungen für eine vorübergehende Assembly, die nie auf dem Datenträger gespeichert wird, verwenden Sie eine Überladung der DefineDynamicAssembly Methode, die Beweise sowie angeforderte Berechtigungen angibt, und stellen ein Evidence Objekt bereit.To specify permission requests for a transient assembly that is never saved to disk, use an overload of the DefineDynamicAssembly method that specifies evidence as well as requested permissions, and supply an Evidence object.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, empfiehlt es sich, eine Überladung der DefineDynamicAssembly-Methode zu verwenden, die Beweise und Berechtigungen angibt, den Beweis bereitzustellen, den die dynamische Assembly enthalten soll, und SecurityPermissionFlag.SkipVerification in refusedPermissionseinzubeziehen.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload .

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence)

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus, Speicherverzeichnis und Beweis.Defines a dynamic assembly using the specified name, access mode, storage directory, and evidence.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[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 https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die Assembly gespeichert wird.The name of the directory where the assembly will be saved. Wenn dirnull ist, wird das aktuelle Verzeichnis als Standardverzeichnis verwendet.If dir is null, the directory defaults to the current directory.

evidence
Evidence

Der für die dynamische Assembly angegebene Beweis.The evidence supplied for the dynamic assembly. Der Beweis wird ohne Änderungen als endgültiger Satz von Beweisen für die Richtlinienauflösung verwendet.The evidence is used unaltered as the final set of evidence used for policy resolution.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Nur voll vertrauenswürdige Aufrufer können Ihre evidence bereitstellen, wenn Sie eine dynamische Assemblydefinieren.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. Die Laufzeit ordnet die Evidence über die Sicherheitsrichtlinie zu, um die gewährten Berechtigungen zu bestimmen.The runtime will map the Evidence through the security policy to determine the granted permissions. Teilweise vertrauenswürdige Aufrufer müssen einen NULL-evidencebereitstellen.Partially trusted callers must supply a null evidence. Wenn evidence nullist, kopiert die Runtime die Berechtigungs Sätze, d. h. die aktuellen Grant-und Ablehnungs Sätze, von der Assembly des Aufrufers in den dynamischen Assembly, der definiert wird, und markiert die Richtlinie als aufgelöst.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Wenn die dynamische Assembly auf dem Datenträger gespeichert wird, erhalten nachfolgende Lasten Zuweisungen basierend auf den Richtlinien, die dem Speicherort zugeordnet sind, an dem die Assembly gespeichert wurde.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, empfiehlt es sich, eine Überladung der DefineDynamicAssembly-Methode zu verwenden, die Beweise und Berechtigungen angibt, den Beweis bereitzustellen, den die dynamische Assembly enthalten soll, und SecurityPermissionFlag.SkipVerification in refusedPermissionseinzubeziehen.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

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

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und benutzerdefinierten Attributen und verwendet die angegebene Quelle für den Sicherheitskontext.Defines a dynamic assembly with the specified name, access mode, and custom attributes, and using the specified source for its security context.

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);
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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * seq<System.Reflection.Emit.CustomAttributeBuilder> * System.Security.SecurityContextSource -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Zugriffsmodus für die dynamische Assembly.The access mode for the dynamic assembly.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Eine aufzählbare Liste von Attributen, die auf die Assembly angewendet werden sollen, oder null, wenn keine Attribute vorhanden sind.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

securityContextSource
SecurityContextSource

Die Quelle des Sicherheitskontexts.The source of the security context.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit Leerraum, oder sie enthält einen Schrägstrich bzw. einen umgekehrten Schrägstrich.The Name property of name starts with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Der Wert von securityContextSource war keiner der Enumerationswerte.The value of securityContextSource was not one of the enumeration values.

Hinweise

Verwenden Sie diese Methoden Überladung, um Attribute anzugeben, die nicht ordnungsgemäß funktionieren, wenn Sie beim Erstellen einer dynamischen Assembly angewendet werden.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Beispielsweise funktionieren Sicherheits Attribute wie SecurityTransparentAttribute und SecurityCriticalAttribute nicht ordnungsgemäß, wenn Sie nach dem Erstellen einer dynamischen Assembly hinzugefügt werden.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should be used only to define a dynamic assembly in the current application domain. Weitere Informationen zu dieser Einschränkung finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information about this restriction, see the Load(AssemblyName) method overload.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und Speicherverzeichnis.Defines a dynamic assembly using the specified name, access mode, and storage directory.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, dir As String) As AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

dir
String

Der Name des Verzeichnisses, in dem die Assembly gespeichert wird.The name of the directory where the assembly will be saved. Wenn dirnull ist, wird das aktuelle Verzeichnis als Standardverzeichnis verwendet.If dir is null, the directory defaults to the current directory.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, empfiehlt es sich, eine Überladung der DefineDynamicAssembly-Methode zu verwenden, die Beweise und Berechtigungen angibt, den Beweis bereitzustellen, den die dynamische Assembly enthalten soll, und SecurityPermissionFlag.SkipVerification in refusedPermissionseinzubeziehen.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)

Warnung

Diese API ist jetzt veraltet.

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und Beweis.Defines a dynamic assembly using the specified name, access mode, and evidence.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Security::Policy::Evidence ^ evidence);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See https://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);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * System.Security.Policy.Evidence -> System.Reflection.Emit.AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Modus, in dem auf die dynamische Assembly zugegriffen wird.The mode in which the dynamic assembly will be accessed.

evidence
Evidence

Der für die dynamische Assembly angegebene Beweis.The evidence supplied for the dynamic assembly. Der Beweis wird ohne Änderungen als endgültiger Satz von Beweisen für die Richtlinienauflösung verwendet.The evidence is used unaltered as the final set of evidence used for policy resolution.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Implementiert

Attribute

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und das AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and the AssemblyResolve event.

Zuerst versucht das Codebeispiel, eine Instanz von MyDynamicType zu erstellen, indem die CreateInstance-Methode mit einem ungültigen Assemblynamen aufgerufen wird, und fängt die resultierende Ausnahme ab.First, the code example tries to create an instance of MyDynamicType by calling the CreateInstance method with an invalid assembly name, and catches the resulting exception.

Im Codebeispiel wird dann ein Ereignishandler für das AssemblyResolve-Ereignis hinzugefügt, und es wird erneut versucht, eine Instanz vonMyDynamicTypezu erstellen.The code example then adds an event handler for the AssemblyResolve event, and again tries to create an instance ofMyDynamicType. Während des Aufrufes CreateInstancewird das AssemblyResolve-Ereignis für die ungültige Assembly ausgelöst.During the call to CreateInstance, the AssemblyResolve event is raised for the invalid assembly. Der Ereignishandler erstellt eine dynamische Assembly, die einen Typ mit dem Namen MyDynamicTypeenthält, gibt dem Typ einen Parameter losen Konstruktor und gibt die neue dynamische Assembly zurück.The event handler creates a dynamic assembly that contains a type named MyDynamicType, gives the type a parameterless constructor, and returns the new dynamic assembly. Der CreateInstance-Aufrufe wird dann erfolgreich abgeschlossen, und der Konstruktor für MyDynamicType zeigt eine Meldung in der Konsole an.The call to CreateInstance then finishes successfully, and the constructor for MyDynamicType displays a message at the console.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Nur voll vertrauenswürdige Aufrufer können Ihre evidence bereitstellen, wenn Sie eine dynamische Assemblydefinieren.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. Die Laufzeit ordnet die Evidence über die Sicherheitsrichtlinie zu, um die gewährten Berechtigungen zu bestimmen.The runtime will map the Evidence through the security policy to determine the granted permissions. Teilweise vertrauenswürdige Aufrufer müssen einen NULL-evidencebereitstellen.Partially trusted callers must supply a null evidence. Wenn evidence nullist, kopiert die Runtime die Berechtigungs Sätze, d. h. die aktuellen Grant-und Ablehnungs Sätze, von der Assembly des Aufrufers in den dynamischen Assembly, der definiert wird, und markiert die Richtlinie als aufgelöst.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Wenn die dynamische Assembly auf dem Datenträger gespeichert wird, erhalten nachfolgende Lasten Zuweisungen basierend auf den Richtlinien, die dem Speicherort zugeordnet sind, an dem die Assembly gespeichert wurde.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, empfiehlt es sich, eine Überladung der DefineDynamicAssembly-Methode zu verwenden, die Beweise und Berechtigungen angibt, den Beweis bereitzustellen, den die dynamische Assembly enthalten soll, und SecurityPermissionFlag.SkipVerification in refusedPermissionseinzubeziehen.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Definiert eine dynamische Assembly mit dem angegebenen Namen, Zugriffsmodus und benutzerdefinierten Attributen.Defines a dynamic assembly with the specified name, access mode, and custom attributes.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Collections::Generic::IEnumerable<System::Reflection::Emit::CustomAttributeBuilder ^> ^ assemblyAttributes);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * seq<System.Reflection.Emit.CustomAttributeBuilder> -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, assemblyAttributes As IEnumerable(Of CustomAttributeBuilder)) As AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Zugriffsmodus für die dynamische Assembly.The access mode for the dynamic assembly.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Eine aufzählbare Liste von Attributen, die auf die Assembly angewendet werden sollen, oder null, wenn keine Attribute vorhanden sind.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Funktionen.A dynamic assembly with the specified name and features.

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit Leerraum, oder sie enthält einen Schrägstrich bzw. einen umgekehrten Schrägstrich.The Name property of name starts with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie eine dynamische Assembly erstellt wird, die über die SecurityTransparentAttributeverfügt.The following code sample shows how to create a dynamic assembly that has the SecurityTransparentAttribute. Das-Attribut muss als Element eines Arrays von CustomAttributeBuilder-Objekten angegeben werden.The attribute must be specified as an element of an array of CustomAttributeBuilder objects.

Der erste Schritt beim Erstellen der CustomAttributeBuilder ist das Abrufen eines Konstruktors für das Attribut.The first step in creating the CustomAttributeBuilder is to obtain a constructor for the attribute. Der Konstruktor verfügt über keine Parameter, daher wird die GetConstructor-Methode mit einem leeren Array von Type-Objekten aufgerufen, um die Parametertypen darzustellen.The constructor has no parameters, so the GetConstructor method is called with an empty array of Type objects to represent the types of the parameters. Der zweite Schritt besteht darin, das resultierende ConstructorInfo Objekt an den Konstruktor für die CustomAttributeBuilder-Klasse zu übergeben, sowie ein leeres Array vom Typ Object, das die Argumente darstellt.The second step is to pass the resulting ConstructorInfo object to the constructor for the CustomAttributeBuilder class, together with an empty array of type Object to represent the arguments.

Die resultierende CustomAttributeBuilder wird dann als einziges Element eines Arrays an die DefineDynamicAssembly-Methode weitergegeben.The resulting CustomAttributeBuilder is then passed to the DefineDynamicAssembly method as the only element of an array.

Der Beispielcode definiert ein Modul und einen Typ in der neuen dynamischen Assembly und zeigt dann die Attribute der Assembly an.The example code defines a module and a type in the new dynamic assembly, and then displays the assembly's attributes.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Security;

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 = 
        SecurityTransparentAttribute::typeid->GetConstructor(
            Type::EmptyTypes);
    CustomAttributeBuilder^ transparent = gcnew CustomAttributeBuilder(
        transparentCtor,
        gcnew array<Object^> {} );
      
    // Create a dynamic assembly using the attribute. The attribute is
    // passed as an array with one element.
    AssemblyName^ aName = gcnew AssemblyName("EmittedAssembly");
    AssemblyBuilder^ ab = AppDomain::CurrentDomain->DefineDynamicAssembly( 
        aName, 
        AssemblyBuilderAccess::Run,
        gcnew array<CustomAttributeBuilder^> { transparent } );

    ModuleBuilder^ mb = ab->DefineDynamicModule( aName->Name );
    TypeBuilder^ tb = mb->DefineType( 
        "MyDynamicType", 
        TypeAttributes::Public );
    tb->CreateType();

    Console::WriteLine("{0}\nAssembly attributes:", ab);
    for each (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
 */
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Security;

class Example
{
    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
 */
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security

Module Example

    Sub 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.
        '
        Dim transparentCtor As ConstructorInfo = _
            GetType(SecurityTransparentAttribute).GetConstructor( _
                Type.EmptyTypes)
        Dim transparent As New CustomAttributeBuilder( _
            transparentCtor, _
            New Object() {} )
      
        ' Create a dynamic assembly Imports the attribute. The attribute is
        ' passed as an array with one element.
        Dim aName As New AssemblyName("EmittedAssembly")
        Dim ab As AssemblyBuilder = _
            AppDomain.CurrentDomain.DefineDynamicAssembly( _
                aName, _
                AssemblyBuilderAccess.Run, _
                New CustomAttributeBuilder() { transparent } )

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

        Console.WriteLine("{0}" & vbLf & "Assembly attributes:", ab)
        For Each attr As Attribute In ab.GetCustomAttributes(True)
            Console.WriteLine(vbTab & "{0}", attr)
        Next
    End Sub
End Module

' This code example produces the following output:
'
'EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
'Assembly attributes:
'        System.Security.SecurityTransparentAttribute

Hinweise

Verwenden Sie diese Methoden Überladung, um Attribute anzugeben, die nicht ordnungsgemäß funktionieren, wenn Sie beim Erstellen einer dynamischen Assembly angewendet werden.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Beispielsweise funktionieren Sicherheits Attribute wie SecurityTransparentAttribute und SecurityCriticalAttribute nicht ordnungsgemäß, wenn Sie nach dem Erstellen einer dynamischen Assembly hinzugefügt werden.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should be used only to define a dynamic assembly in the current application domain. Weitere Informationen zu dieser Einschränkung finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information about this restriction, see the Load(AssemblyName) method overload.

Diese Methoden Überladung wird in der .NET Framework 3,5.NET Framework 3.5eingeführt.This method overload is introduced in the .NET Framework 3,5.NET Framework 3.5.

Siehe auch

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Definiert eine dynamische Assembly mit dem angegebenen Namen und Zugriffsmodus.Defines a dynamic assembly with the specified name and access mode.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess) As AssemblyBuilder

Parameter

name
AssemblyName

Die eindeutige Identität der dynamischen Assembly.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

Der Zugriffsmodus für die dynamische Assembly.The access mode for the dynamic assembly.

Gibt zurück

Eine dynamische Assembly mit dem angegebenen Namen und Zugriffsmodus.A dynamic assembly with the specified name and access mode.

Implementiert

Ausnahmen

name ist null.name is null.

Die Name-Eigenschaft von name ist null.The Name property of name is null.

- oder --or- Die Name-Eigenschaft von name beginnt mit einem Leerzeichen oder enthält einen Schrägstrich oder umgekehrten Schrägstrich.The Name property of name begins with white space, or contains a forward or backward slash.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Beispiele

Im folgenden Beispiel werden die DefineDynamicAssembly-Methode und AssemblyResolve-Ereignis veranschaulicht.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Hinweise

Diese Methode sollte nur verwendet werden, um eine dynamische Assembly in der aktuellen Anwendungsdomäne zu definieren.This method should only be used to define a dynamic assembly in the current application domain. Weitere Informationen finden Sie in der Load(AssemblyName)-Methoden Überladung.For more information, see the Load(AssemblyName) method overload.

Hinweis

Bei der Entwicklung von Code, der dynamische Assemblys ausgibt, empfiehlt es sich, eine Überladung der DefineDynamicAssembly-Methode zu verwenden, die Beweise und Berechtigungen angibt, den Beweis bereitzustellen, den die dynamische Assembly enthalten soll, und SecurityPermissionFlag.SkipVerification in refusedPermissionseinzubeziehen.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. Wenn Sie SkipVerification in den refusedPermissions Parameter einschließen, wird sichergestellt, dass die MSIL überprüft wird.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Eine Einschränkung dieser Methode besteht darin, dass Sie auch SecurityException ausgelöst wird, wenn Sie mit Code verwendet wird, der volle Vertrauenswürdigkeit erfordert.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Gilt für: