AssemblyBuilder.DefineDynamicModule Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Definuje dynamický modul v tomto sestavení.
Přetížení
DefineDynamicModule(String) |
Definuje pojmenovaný přechodný dynamický modul v tomto sestavení. |
DefineDynamicModule(String, Boolean) |
Definuje pojmenovaný přechodný dynamický modul v tomto sestavení a určuje, zda mají být generovány informace o symbolech. |
DefineDynamicModule(String, String) |
Definuje trvalý dynamický modul s daným názvem, který se uloží do zadaného souboru. Nejsou generovány žádné informace o symbolech. |
DefineDynamicModule(String, String, Boolean) |
Definuje trvalý dynamický modul, určuje název modulu, název souboru, do kterého se modul uloží, a určuje, jestli se mají informace o symbolech vygenerovat pomocí výchozího zapisovače symbolů. |
DefineDynamicModule(String)
- Zdroj:
- AssemblyBuilder.cs
- Zdroj:
- AssemblyBuilder.cs
- Zdroj:
- AssemblyBuilder.cs
Definuje pojmenovaný přechodný dynamický modul v tomto sestavení.
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
Název dynamického modulu.
Návraty
ModuleBuilder představující definovaný dynamický modul.
Výjimky
name
začíná prázdným znakem.
-nebo-
Délka name
je nula.
-nebo-
Délka name
je větší než maximální délka definovaná systémem.
-nebo-
Pouze rozhraní .NET Framework: Modul se stejným name
již byl v tomto sestavení definován.
name
je null
.
Pouze .NET Core a .NET 5+: Dynamický modul již byl v tomto sestavení definován.
Volající nemá požadované oprávnění.
Sestavení pro výchozí zapisovač symbolů nelze načíst.
-nebo-
Typ, který implementuje výchozí rozhraní pro zápis symbolů, nelze najít.
Příklady
Následující příklad kódu ukazuje, jak vytvořit přechodný dynamický modul pomocí 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")
Poznámky
Pouze .NET Core a .NET 5+: sestavení s více moduly nejsou podporována. V sestavení může být definován pouze jeden dynamický modul.
Pouze rozhraní .NET Framework: Jedná se o chybu při definování více dynamických modulů se stejným názvem v sestavení.
Definovaný dynamický modul je přechodný. Dynamický modul není uložen, i když bylo vytvořeno nadřazené dynamické sestavení s RunAndSave.
Poznámka
Chcete-li potlačit optimalizace při ladění dynamických modulů, před voláním DefineDynamicModulepoužijte atribut DebuggableAttribute na dynamické sestavení . Vytvořte instanci DebuggableAttribute s příznakem DisableOptimizations a použijte ji pomocí metody SetCustomAttribute. Atribut musí být použit pro dynamické sestavení. Nemá žádný vliv, pokud se použije na modul.
Poznámka
Počínaje aktualizací Service Pack 1 rozhraní .NET Framework 2.0 už tento člen nevyžaduje ReflectionPermission s příznakem ReflectionPermissionFlag.ReflectionEmit. (Viz problémy se zabezpečením vgenerování reflexe.) Pokud chcete tuto funkci použít, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.
Platí pro
DefineDynamicModule(String, Boolean)
Definuje pojmenovaný přechodný dynamický modul v tomto sestavení a určuje, zda mají být generovány informace o symbolech.
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
Název dynamického modulu.
- emitSymbolInfo
- Boolean
true
, pokud se mají vygenerovat informace o symbolech; jinak false
.
Návraty
ModuleBuilder představující definovaný dynamický modul.
Výjimky
name
začíná prázdným znakem.
-nebo-
Délka name
je nula.
-nebo-
Délka name
je větší než maximální délka definovaná systémem.
name
je null
.
Sestavení pro výchozí zapisovač symbolů nelze načíst.
-nebo-
Typ, který implementuje výchozí rozhraní pro zápis symbolů, nelze najít.
Volající nemá požadované oprávnění.
Příklady
Následující příklad kódu ukazuje, jak vytvořit přechodný dynamický modul pomocí DefineDynamicModule
, potlačení informací o symbolech.
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)
Poznámky
Jedná se o chybu při definování více dynamických modulů se stejným názvem v sestavení.
Dynamický modul není uložen, i když bylo vytvořeno nadřazené dynamické sestavení s RunAndSave.
Poznámka
Chcete-li potlačit optimalizace při ladění dynamických modulů, před voláním DefineDynamicModulepoužijte atribut DebuggableAttribute na dynamické sestavení . Vytvořte instanci DebuggableAttribute s příznakem DisableOptimizations a použijte ji pomocí metody SetCustomAttribute. Atribut musí být použit pro dynamické sestavení. Nemá žádný vliv, pokud se použije na modul.
Poznámka
Počínaje aktualizací Service Pack 1 rozhraní .NET Framework 2.0 už tento člen nevyžaduje ReflectionPermission s příznakem ReflectionPermissionFlag.ReflectionEmit. (Viz problémy se zabezpečením vgenerování reflexe.) Pokud chcete tuto funkci použít, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.
Platí pro
DefineDynamicModule(String, String)
Definuje trvalý dynamický modul s daným názvem, který se uloží do zadaného souboru. Nejsou generovány žádné informace o symbolech.
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
Název dynamického modulu.
- fileName
- String
Název souboru, do kterého se má dynamický modul uložit.
Návraty
Objekt ModuleBuilder představující definovaný dynamický modul.
Výjimky
name
nebo fileName
je null
.
Délka name
nebo fileName
je nula.
-nebo-
Délka name
je větší než maximální délka definovaná systémem.
-nebo-
fileName
obsahuje specifikaci cesty (například součást adresáře).
-nebo-
Došlo ke konfliktu s názvem jiného souboru, který patří do tohoto sestavení.
Toto sestavení bylo dříve uloženo.
Toto sestavení bylo volána na dynamické sestavení s atributem Run.
Volající nemá požadované oprávnění.
Sestavení pro výchozí zapisovač symbolů nelze načíst.
-nebo-
Typ, který implementuje výchozí rozhraní pro zápis symbolů, nelze najít.
Příklady
Následující příklad kódu ukazuje, jak vytvořit trvalý dynamický modul pomocí 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")
Poznámky
Pokud chcete definovat trvalý dynamický modul, musí být toto sestavení vytvořeno pomocí Save nebo atributu RunAndSave.
Pokud chcete, aby modul obsahoval manifest sestavení, name
by měl být stejný jako název sestavení (tj. AssemblyName.Name vlastnost AssemblyName použitá k vytvoření dynamického sestavení) a fileName
by měla být stejná jako název souboru, který zadáte při uložení sestavení.
V sestavení s pouze jedním modulem by měl tento modul obsahovat manifest sestavení.
Poznámka
Chcete-li potlačit optimalizace při ladění dynamických modulů, před voláním DefineDynamicModulepoužijte atribut DebuggableAttribute na dynamické sestavení . Vytvořte instanci DebuggableAttribute s příznakem DisableOptimizations a použijte ji pomocí metody SetCustomAttribute. Atribut musí být použit pro dynamické sestavení. Nemá žádný vliv, pokud se použije na modul.
Poznámka
Počínaje aktualizací Service Pack 1 rozhraní .NET Framework 2.0 už tento člen nevyžaduje ReflectionPermission s příznakem ReflectionPermissionFlag.ReflectionEmit. (Viz problémy se zabezpečením vgenerování reflexe.) Pokud chcete tuto funkci použít, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.
Platí pro
DefineDynamicModule(String, String, Boolean)
Definuje trvalý dynamický modul, určuje název modulu, název souboru, do kterého se modul uloží, a určuje, jestli se mají informace o symbolech vygenerovat pomocí výchozího zapisovače symbolů.
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
Název dynamického modulu.
- fileName
- String
Název souboru, do kterého se má dynamický modul uložit.
- emitSymbolInfo
- Boolean
Pokud true
, symbolické informace se zapisuje pomocí výchozího zapisovače symbolů.
Návraty
Objekt ModuleBuilder představující definovaný dynamický modul.
Výjimky
name
nebo fileName
je null
.
Délka name
nebo fileName
je nula.
-nebo-
Délka name
je větší než maximální délka definovaná systémem.
-nebo-
fileName
obsahuje specifikaci cesty (například součást adresáře).
-nebo-
Došlo ke konfliktu s názvem jiného souboru, který patří do tohoto sestavení.
Toto sestavení bylo dříve uloženo.
Toto sestavení bylo volána na dynamické sestavení s atributem Run.
Sestavení pro výchozí zapisovač symbolů nelze načíst.
-nebo-
Typ, který implementuje výchozí rozhraní pro zápis symbolů, nelze najít.
Volající nemá požadované oprávnění.
Příklady
Následující příklad kódu ukazuje, jak vytvořit trvalý dynamický modul s emisemi symbolů pomocí 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)
Poznámky
Pokud chcete definovat trvalý dynamický modul, musí být toto sestavení vytvořeno pomocí Save nebo atributu RunAndSave.
Pokud chcete, aby modul obsahoval manifest sestavení, name
by měl být stejný jako název sestavení (tj. AssemblyName.Name vlastnost AssemblyName použitá k vytvoření dynamického sestavení) a fileName
by měla být stejná jako název souboru, který zadáte při uložení sestavení.
V sestavení s pouze jedním modulem by měl tento modul obsahovat manifest sestavení.
Poznámka
Chcete-li potlačit optimalizace při ladění dynamických modulů, před voláním DefineDynamicModulepoužijte atribut DebuggableAttribute na dynamické sestavení . Vytvořte instanci DebuggableAttribute s příznakem DisableOptimizations a použijte ji pomocí metody SetCustomAttribute. Atribut musí být použit pro dynamické sestavení. Nemá žádný vliv, pokud se použije na modul.
Poznámka
Počínaje aktualizací Service Pack 1 rozhraní .NET Framework 2.0 už tento člen nevyžaduje ReflectionPermission s příznakem ReflectionPermissionFlag.ReflectionEmit. (Viz problémy se zabezpečením vgenerování reflexe.) Pokud chcete tuto funkci použít, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.