Udostępnij za pośrednictwem


AssemblyBuilder.DefineDynamicModule Metoda

Definicja

Definiuje moduł dynamiczny w tym zestawie.

Przeciążenia

DefineDynamicModule(String)

Definiuje nazwany moduł dynamiczny przejściowy w tym zestawie.

DefineDynamicModule(String, Boolean)

Definiuje nazwany moduł dynamiczny przejściowy w tym zestawie i określa, czy mają być emitowane informacje o symbolach.

DefineDynamicModule(String, String)

Definiuje trwały moduł dynamiczny o podanej nazwie, która zostanie zapisana w określonym pliku. Żadne informacje o symbolach nie są emitowane.

DefineDynamicModule(String, String, Boolean)

Definiuje trwały moduł dynamiczny, określając nazwę modułu, nazwę pliku, do którego zostanie zapisany moduł i czy informacje o symbolach powinny być emitowane przy użyciu domyślnego modułu zapisywania symboli.

DefineDynamicModule(String)

Źródło:
AssemblyBuilder.cs
Źródło:
AssemblyBuilder.cs
Źródło:
AssemblyBuilder.cs

Definiuje nazwany moduł dynamiczny przejściowy w tym zestawie.

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

Parametry

name
String

Nazwa modułu dynamicznego.

Zwraca

ModuleBuilder reprezentujący zdefiniowany moduł dynamiczny.

Wyjątki

name zaczyna się od białych znaków.

-lub-

Długość name wynosi zero.

-lub-

Długość name jest większa niż maksymalna długość zdefiniowana przez system.

-lub-

Tylko program .NET Framework: moduł z tym samym name został już zdefiniowany w tym zestawie.

name jest null.

Tylko platformy .NET Core i .NET 5+: moduł dynamiczny został już zdefiniowany w tym zestawie.

Obiekt wywołujący nie ma wymaganych uprawnień.

Nie można załadować zestawu domyślnego składnika zapisywania symboli.

-lub-

Nie można odnaleźć typu implementujący domyślny interfejs zapisywania symboli.

Przykłady

W poniższym przykładzie kodu pokazano, jak utworzyć przejściowy moduł dynamiczny przy użyciu DefineDynamicModule.

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")

Uwagi

Tylko platformy .NET Core i .NET 5+: zestawy z wieloma modułami nie są obsługiwane. W zestawie można zdefiniować tylko jeden moduł dynamiczny.

Tylko program .NET Framework: Jest to błąd podczas definiowania wielu modułów dynamicznych o tej samej nazwie w zestawie.

Zdefiniowany moduł dynamiczny jest przejściowy. Moduł dynamiczny nie jest zapisywany, nawet jeśli nadrzędny zestaw dynamiczny został utworzony za pomocą RunAndSave.

Nuta

Aby pominąć optymalizacje podczas debugowania modułów dynamicznych, zastosuj atrybut DebuggableAttribute do zestawu dynamicznego przed wywołaniem DefineDynamicModule. Utwórz wystąpienie DebuggableAttribute z flagą DisableOptimizations i zastosuj je przy użyciu metody SetCustomAttribute. Atrybut należy zastosować do zestawu dynamicznego. Nie ma żadnego wpływu, jeśli zastosowano go do modułu.

Nuta

Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ten element członkowski nie wymaga już ReflectionPermission z flagą ReflectionPermissionFlag.ReflectionEmit. (Zobacz problemy z zabezpieczeniami wemisji odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.

Dotyczy

DefineDynamicModule(String, Boolean)

Definiuje nazwany moduł dynamiczny przejściowy w tym zestawie i określa, czy mają być emitowane informacje o symbolach.

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

Parametry

name
String

Nazwa modułu dynamicznego.

emitSymbolInfo
Boolean

true, jeśli informacje o symbolach mają być emitowane; w przeciwnym razie false.

Zwraca

ModuleBuilder reprezentujący zdefiniowany moduł dynamiczny.

Wyjątki

name zaczyna się od białych znaków.

-lub-

Długość name wynosi zero.

-lub-

Długość name jest większa niż maksymalna długość zdefiniowana przez system.

name jest null.

Nie można załadować zestawu domyślnego składnika zapisywania symboli.

-lub-

Nie można odnaleźć typu implementujący domyślny interfejs zapisywania symboli.

Obiekt wywołujący nie ma wymaganych uprawnień.

Przykłady

W poniższym przykładzie kodu pokazano, jak utworzyć przejściowy moduł dynamiczny przy użyciu DefineDynamicModule, pomijając informacje o symbolach.

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)

Uwagi

Jest to błąd podczas definiowania wielu modułów dynamicznych o tej samej nazwie w zestawie.

Moduł dynamiczny nie jest zapisywany, nawet jeśli nadrzędny zestaw dynamiczny został utworzony za pomocą RunAndSave.

Nuta

Aby pominąć optymalizacje podczas debugowania modułów dynamicznych, zastosuj atrybut DebuggableAttribute do zestawu dynamicznego przed wywołaniem DefineDynamicModule. Utwórz wystąpienie DebuggableAttribute z flagą DisableOptimizations i zastosuj je przy użyciu metody SetCustomAttribute. Atrybut należy zastosować do zestawu dynamicznego. Nie ma żadnego wpływu, jeśli zastosowano go do modułu.

Nuta

Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ten element członkowski nie wymaga już ReflectionPermission z flagą ReflectionPermissionFlag.ReflectionEmit. (Zobacz problemy z zabezpieczeniami wemisji odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.

Dotyczy

DefineDynamicModule(String, String)

Definiuje trwały moduł dynamiczny o podanej nazwie, która zostanie zapisana w określonym pliku. Żadne informacje o symbolach nie są emitowane.

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

Parametry

name
String

Nazwa modułu dynamicznego.

fileName
String

Nazwa pliku, do którego ma zostać zapisany moduł dynamiczny.

Zwraca

Obiekt ModuleBuilder reprezentujący zdefiniowany moduł dynamiczny.

Wyjątki

name lub fileName jest null.

Długość name lub fileName wynosi zero.

-lub-

Długość name jest większa niż maksymalna długość zdefiniowana przez system.

-lub-

fileName zawiera specyfikację ścieżki (na przykład składnik katalogu).

-lub-

Występuje konflikt z nazwą innego pliku, który należy do tego zestawu.

Ten zestaw został wcześniej zapisany.

Ten zestaw został wywołany w zestawie dynamicznym z atrybutem Run.

Obiekt wywołujący nie ma wymaganych uprawnień.

Nie można załadować zestawu domyślnego składnika zapisywania symboli.

-lub-

Nie można odnaleźć typu implementujący domyślny interfejs zapisywania symboli.

Przykłady

W poniższym przykładzie kodu pokazano, jak utworzyć trwały moduł dynamiczny przy użyciu DefineDynamicModule.

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")

Uwagi

Aby zdefiniować trwały moduł dynamiczny, należy utworzyć ten zestaw za pomocą Save lub atrybutu RunAndSave.

Jeśli chcesz, aby moduł zawierał manifest zestawu, name powinien być taki sam jak nazwa zestawu (czyli właściwość AssemblyName.NameAssemblyName użyta do utworzenia zestawu dynamicznego) i fileName powinna być taka sama jak nazwa pliku określona podczas zapisywania zestawu.

W zestawie z tylko jednym modułem ten moduł powinien zawierać manifest zestawu.

Nuta

Aby pominąć optymalizacje podczas debugowania modułów dynamicznych, zastosuj atrybut DebuggableAttribute do zestawu dynamicznego przed wywołaniem DefineDynamicModule. Utwórz wystąpienie DebuggableAttribute z flagą DisableOptimizations i zastosuj je przy użyciu metody SetCustomAttribute. Atrybut należy zastosować do zestawu dynamicznego. Nie ma żadnego wpływu, jeśli zastosowano go do modułu.

Nuta

Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ten element członkowski nie wymaga już ReflectionPermission z flagą ReflectionPermissionFlag.ReflectionEmit. (Zobacz problemy z zabezpieczeniami wemisji odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.

Dotyczy

DefineDynamicModule(String, String, Boolean)

Definiuje trwały moduł dynamiczny, określając nazwę modułu, nazwę pliku, do którego zostanie zapisany moduł i czy informacje o symbolach powinny być emitowane przy użyciu domyślnego modułu zapisywania symboli.

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

Parametry

name
String

Nazwa modułu dynamicznego.

fileName
String

Nazwa pliku, do którego ma zostać zapisany moduł dynamiczny.

emitSymbolInfo
Boolean

Jeśli true, informacje symboliczne są zapisywane przy użyciu domyślnego składnika zapisywania symboli.

Zwraca

Obiekt ModuleBuilder reprezentujący zdefiniowany moduł dynamiczny.

Wyjątki

name lub fileName jest null.

Długość name lub fileName wynosi zero.

-lub-

Długość name jest większa niż maksymalna długość zdefiniowana przez system.

-lub-

fileName zawiera specyfikację ścieżki (na przykład składnik katalogu).

-lub-

Występuje konflikt z nazwą innego pliku, który należy do tego zestawu.

Ten zestaw został wcześniej zapisany.

Ten zestaw został wywołany w zestawie dynamicznym z atrybutem Run.

Nie można załadować zestawu domyślnego składnika zapisywania symboli.

-lub-

Nie można odnaleźć typu implementujący domyślny interfejs zapisywania symboli.

Obiekt wywołujący nie ma wymaganych uprawnień.

Przykłady

W poniższym przykładzie kodu pokazano, jak utworzyć trwały moduł dynamiczny z emisją symboli przy użyciu DefineDynamicModule.

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)

Uwagi

Aby zdefiniować trwały moduł dynamiczny, należy utworzyć ten zestaw za pomocą Save lub atrybutu RunAndSave.

Jeśli chcesz, aby moduł zawierał manifest zestawu, name powinien być taki sam jak nazwa zestawu (czyli właściwość AssemblyName.NameAssemblyName użyta do utworzenia zestawu dynamicznego) i fileName powinna być taka sama jak nazwa pliku określona podczas zapisywania zestawu.

W zestawie z tylko jednym modułem ten moduł powinien zawierać manifest zestawu.

Nuta

Aby pominąć optymalizacje podczas debugowania modułów dynamicznych, zastosuj atrybut DebuggableAttribute do zestawu dynamicznego przed wywołaniem DefineDynamicModule. Utwórz wystąpienie DebuggableAttribute z flagą DisableOptimizations i zastosuj je przy użyciu metody SetCustomAttribute. Atrybut należy zastosować do zestawu dynamicznego. Nie ma żadnego wpływu, jeśli zastosowano go do modułu.

Nuta

Począwszy od programu .NET Framework 2.0 z dodatkiem Service Pack 1, ten element członkowski nie wymaga już ReflectionPermission z flagą ReflectionPermissionFlag.ReflectionEmit. (Zobacz problemy z zabezpieczeniami wemisji odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.

Dotyczy