Freigeben über


AssemblyBuilder.DefineDynamicModule Methode

Definition

Definiert ein dynamisches Modul in dieser Assembly.

Überlädt

DefineDynamicModule(String)

Definiert ein benanntes vorübergehendes dynamisches Modul in dieser Assembly.

DefineDynamicModule(String, Boolean)

Definiert ein benanntes vorübergehendes dynamisches Modul in dieser Assembly und gibt an, ob Symbolinformationen ausgegeben werden sollen.

DefineDynamicModule(String, String)

Definiert ein persistentes dynamisches Modul mit dem angegebenen Namen, der in der angegebenen Datei gespeichert wird. Es werden keine Symbolinformationen ausgegeben.

DefineDynamicModule(String, String, Boolean)

Definiert ein persistentes dynamisches Modul, das den Modulnamen angibt, den Namen der Datei, in der das Modul gespeichert wird, und ob Symbolinformationen mithilfe des Standardsymbolschreibers ausgegeben werden sollen.

DefineDynamicModule(String)

Quelle:
AssemblyBuilder.cs
Quelle:
AssemblyBuilder.cs
Quelle:
AssemblyBuilder.cs

Definiert ein benanntes vorübergehendes dynamisches Modul in dieser Assembly.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name);
member this.DefineDynamicModule : string -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String) As ModuleBuilder

Parameter

name
String

Der Name des dynamischen Moduls.

Gibt zurück

Ein ModuleBuilder, der das definierte dynamische Modul darstellt.

Ausnahmen

name beginnt mit Leerzeichen.

-oder-

Die Länge von name ist Null.

-oder-

Die Länge der name ist größer als die vom System definierte maximale Länge.

-oder-

.NET Framework nur: In dieser Assembly wurde bereits ein Modul mit demselben name definiert.

name ist null.

Nur .NET Core und .NET 5+: In dieser Assembly wurde bereits ein dynamisches Modul definiert.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Die Assembly für standardsymbol writer kann nicht geladen werden.

-oder-

Der Typ, der die Standardmäßige Symbol writer-Schnittstelle implementiert, wurde nicht gefunden.

Beispiele

Im folgenden Codebeispiel wird das Erstellen eines vorübergehenden dynamischen Moduls mithilfe von DefineDynamicModuleveranschaulicht.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it cannot be saved.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule( "MyModule1" );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it can not be saved.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule1");
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)

' Create a transient dynamic module. Since no DLL name is specified with
' this constructor, it can not be saved. 
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule1")

Hinweise

Nur .NET Core und .NET 5+: Assemblys mit mehreren Modulen werdennicht unterstützt. In einer Assembly kann nur ein dynamisches Modul definiert werden.

.NET Framework nur: Es ist ein Fehler, mehrere dynamische Module mit demselben Namen in einer Assembly zu definieren.

Das definierte dynamische Modul ist vorübergehend. Das dynamische Modul wird nicht gespeichert, auch wenn die übergeordnete dynamische Assembly mit RunAndSaveerstellt wurde.

Anmerkung

Um Optimierungen beim Debuggen dynamischer Module zu unterdrücken, wenden Sie das attribut DebuggableAttribute auf die dynamische Assembly an, bevor Sie DefineDynamicModuleaufrufen. Erstellen Sie eine Instanz von DebuggableAttribute mit dem DisableOptimizations-Flag, und wenden Sie sie mithilfe der SetCustomAttribute-Methode an. Das Attribut muss auf die dynamische Assembly angewendet werden. Sie hat keine Auswirkung, wenn sie auf das Modul angewendet wird.

Anmerkung

Ab .NET Framework 2.0 Service Pack 1 erfordert dieses Mitglied nicht mehr ReflectionPermission mit dem ReflectionPermissionFlag.ReflectionEmit-Flag. (Siehe Sicherheitsprobleme in Reflection Emit.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.

Gilt für:

DefineDynamicModule(String, Boolean)

Definiert ein benanntes vorübergehendes dynamisches Modul in dieser Assembly und gibt an, ob Symbolinformationen ausgegeben werden sollen.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name, bool emitSymbolInfo);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name, bool emitSymbolInfo);
member this.DefineDynamicModule : string * bool -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String, emitSymbolInfo As Boolean) As ModuleBuilder

Parameter

name
String

Der Name des dynamischen Moduls.

emitSymbolInfo
Boolean

true, wenn Symbolinformationen ausgegeben werden sollen; andernfalls false.

Gibt zurück

Ein ModuleBuilder, der das definierte dynamische Modul darstellt.

Ausnahmen

name beginnt mit Leerzeichen.

-oder-

Die Länge von name ist Null.

-oder-

Die Länge der name ist größer als die vom System definierte maximale Länge.

name ist null.

Die Assembly für standardsymbol writer kann nicht geladen werden.

-oder-

Der Typ, der die Standardmäßige Symbol writer-Schnittstelle implementiert, wurde nicht gefunden.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe von DefineDynamicModuleein vorübergehendes dynamisches Modul erstellen und Symbolinformationen unterdrücken.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it can not be saved. By specifying the second parameter
// of the constructor as false, we can suppress the emission of symbol info.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule(
   "MyModule2", false );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it can not be saved. By specifying the second parameter
// of the constructor as false, we can suppress the emission of symbol info.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule2",
                                 false);
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)

' Create a transient dynamic module. Since no DLL name is specified with
' this constructor, it can not be saved. By specifying the second parameter
' of the constructor as false, we can suppress the emission of symbol info.
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule2", _
                                  False)

Hinweise

Fehler beim Definieren mehrerer dynamischer Module mit demselben Namen in einer Assembly.

Das dynamische Modul wird nicht gespeichert, auch wenn die übergeordnete dynamische Assembly mit RunAndSaveerstellt wurde.

Anmerkung

Um Optimierungen beim Debuggen dynamischer Module zu unterdrücken, wenden Sie das attribut DebuggableAttribute auf die dynamische Assembly an, bevor Sie DefineDynamicModuleaufrufen. Erstellen Sie eine Instanz von DebuggableAttribute mit dem DisableOptimizations-Flag, und wenden Sie sie mithilfe der SetCustomAttribute-Methode an. Das Attribut muss auf die dynamische Assembly angewendet werden. Sie hat keine Auswirkung, wenn sie auf das Modul angewendet wird.

Anmerkung

Ab .NET Framework 2.0 Service Pack 1 erfordert dieses Mitglied nicht mehr ReflectionPermission mit dem ReflectionPermissionFlag.ReflectionEmit-Flag. (Siehe Sicherheitsprobleme in Reflection Emit.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.

Gilt für:

DefineDynamicModule(String, String)

Definiert ein persistentes dynamisches Modul mit dem angegebenen Namen, der in der angegebenen Datei gespeichert wird. Es werden keine Symbolinformationen ausgegeben.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name, System::String ^ fileName);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name, string fileName);
member this.DefineDynamicModule : string * string -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String, fileName As String) As ModuleBuilder

Parameter

name
String

Der Name des dynamischen Moduls.

fileName
String

Der Name der Datei, in der das dynamische Modul gespeichert werden soll.

Gibt zurück

Ein ModuleBuilder-Objekt, das das definierte dynamische Modul darstellt.

Ausnahmen

name oder fileName ist null.

Die Länge von name oder fileName ist Null.

-oder-

Die Länge der name ist größer als die vom System definierte maximale Länge.

-oder-

fileName enthält eine Pfadspezifikation (z. B. eine Verzeichniskomponente).

-oder-

Es besteht ein Konflikt mit dem Namen einer anderen Datei, die zu dieser Assembly gehört.

Diese Assembly wurde zuvor gespeichert.

Diese Assembly wurde für eine dynamische Assembly mit Run Attribut aufgerufen.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Die Assembly für standardsymbol writer kann nicht geladen werden.

-oder-

Der Typ, der die Standardmäßige Symbol writer-Schnittstelle implementiert, wurde nicht gefunden.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe von DefineDynamicModuleein persistentes dynamisches Modul erstellen.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a dynamic module that can be saved as the specified DLL name.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule(
   "MyModule3", "MyModule3.dll" );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);
// Create a dynamic module that can be saved as the specified DLL name.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule3",
                                 "MyModule3.dll");
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)
' Create a dynamic module that can be saved as the specified DLL name.
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule3", _
                              "MyModule3.dll")

Hinweise

Um ein persistentes dynamisches Modul zu definieren, muss diese Assembly mit dem Save oder dem attribut RunAndSave erstellt werden.

Wenn das Modul das Assemblymanifest enthalten soll, sollte name mit dem Namen der Assembly übereinstimmen (d. h. die AssemblyName.Name Eigenschaft der AssemblyName, die zum Erstellen der dynamischen Assembly verwendet wurde) und fileName mit dem Dateinamen identisch sein, den Sie beim Speichern der Assembly angeben.

In einer Assembly mit nur einem Modul sollte dieses Modul das Assemblymanifest enthalten.

Anmerkung

Um Optimierungen beim Debuggen dynamischer Module zu unterdrücken, wenden Sie das attribut DebuggableAttribute auf die dynamische Assembly an, bevor Sie DefineDynamicModuleaufrufen. Erstellen Sie eine Instanz von DebuggableAttribute mit dem DisableOptimizations-Flag, und wenden Sie sie mithilfe der SetCustomAttribute-Methode an. Das Attribut muss auf die dynamische Assembly angewendet werden. Sie hat keine Auswirkung, wenn sie auf das Modul angewendet wird.

Anmerkung

Ab .NET Framework 2.0 Service Pack 1 erfordert dieses Mitglied nicht mehr ReflectionPermission mit dem ReflectionPermissionFlag.ReflectionEmit-Flag. (Siehe Sicherheitsprobleme in Reflection Emit.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.

Gilt für:

DefineDynamicModule(String, String, Boolean)

Definiert ein persistentes dynamisches Modul, das den Modulnamen angibt, den Namen der Datei, in der das Modul gespeichert wird, und ob Symbolinformationen mithilfe des Standardsymbolschreibers ausgegeben werden sollen.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name, System::String ^ fileName, bool emitSymbolInfo);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name, string fileName, bool emitSymbolInfo);
member this.DefineDynamicModule : string * string * bool -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String, fileName As String, emitSymbolInfo As Boolean) As ModuleBuilder

Parameter

name
String

Der Name des dynamischen Moduls.

fileName
String

Der Name der Datei, in der das dynamische Modul gespeichert werden soll.

emitSymbolInfo
Boolean

Wenn true, werden symbolische Informationen mithilfe des Standardsymbolschreibers geschrieben.

Gibt zurück

Ein ModuleBuilder-Objekt, das das definierte dynamische Modul darstellt.

Ausnahmen

name oder fileName ist null.

Die Länge von name oder fileName ist Null.

-oder-

Die Länge der name ist größer als die vom System definierte maximale Länge.

-oder-

fileName enthält eine Pfadspezifikation (z. B. eine Verzeichniskomponente).

-oder-

Es besteht ein Konflikt mit dem Namen einer anderen Datei, die zu dieser Assembly gehört.

Diese Assembly wurde zuvor gespeichert.

Diese Assembly wurde für eine dynamische Assembly mit dem attribut Run aufgerufen.

Die Assembly für standardsymbol writer kann nicht geladen werden.

-oder-

Der Typ, der die Standardmäßige Symbol writer-Schnittstelle implementiert, wurde nicht gefunden.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe von DefineDynamicModuleein persistentes dynamisches Modul mit Symbolemissionen erstellen.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a dynamic module that can be saved as the specified DLL name. By
// specifying the third parameter as true, we can allow the emission of symbol info.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule(
   "MyModule4", "MyModule4.dll", true );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);
// Create a dynamic module that can be saved as the specified DLL name. By
// specifying the third parameter as true, we can allow the emission of symbol info.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule4",
                                 "MyModule4.dll",
                                  true);
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)
' Create a dynamic module that can be saved as the specified DLL name. By
' specifying the third parameter as true, we can allow the emission of symbol info.
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule4", _
                              "MyModule4.dll", _
                              True)

Hinweise

Um ein persistentes dynamisches Modul zu definieren, muss diese Assembly mit dem Save oder dem attribut RunAndSave erstellt werden.

Wenn das Modul das Assemblymanifest enthalten soll, sollte name mit dem Namen der Assembly übereinstimmen (d. h. die AssemblyName.Name Eigenschaft der AssemblyName, die zum Erstellen der dynamischen Assembly verwendet wurde) und fileName mit dem Dateinamen identisch sein, den Sie beim Speichern der Assembly angeben.

In einer Assembly mit nur einem Modul sollte dieses Modul das Assemblymanifest enthalten.

Anmerkung

Um Optimierungen beim Debuggen dynamischer Module zu unterdrücken, wenden Sie das attribut DebuggableAttribute auf die dynamische Assembly an, bevor Sie DefineDynamicModuleaufrufen. Erstellen Sie eine Instanz von DebuggableAttribute mit dem DisableOptimizations-Flag, und wenden Sie sie mithilfe der SetCustomAttribute-Methode an. Das Attribut muss auf die dynamische Assembly angewendet werden. Sie hat keine Auswirkung, wenn sie auf das Modul angewendet wird.

Anmerkung

Ab .NET Framework 2.0 Service Pack 1 erfordert dieses Mitglied nicht mehr ReflectionPermission mit dem ReflectionPermissionFlag.ReflectionEmit-Flag. (Siehe Sicherheitsprobleme in Reflection Emit.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.

Gilt für: