AssemblyBuilder.DefineDynamicModule Método

Definição

Define um módulo dinâmico neste assembly.

Sobrecargas

DefineDynamicModule(String)

Define um módulo dinâmico transitório nomeado neste assembly.

DefineDynamicModule(String, Boolean)

Define um módulo dinâmico transitório nomeado neste assembly e especifica se as informações de símbolo devem ser emitidas.

DefineDynamicModule(String, String)

Define um módulo dinâmico persistente com o nome fornecido que será salvo no arquivo especificado. Nenhuma informação de símbolo é emitida.

DefineDynamicModule(String, String, Boolean)

Define um módulo dinâmico persistente, especificando o nome do módulo, o nome do arquivo para o qual o módulo será salvo e se as informações de símbolo devem ser emitidas usando o gravador de símbolo padrão.

DefineDynamicModule(String)

Origem:
AssemblyBuilder.cs
Origem:
AssemblyBuilder.cs
Origem:
AssemblyBuilder.cs

Define um módulo dinâmico transitório nomeado neste 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

Parâmetros

name
String

O nome do módulo dinâmico.

Retornos

Um ModuleBuilder que representa o módulo dinâmico definido.

Exceções

name começa com espaço em branco.

-ou-

O comprimento de name é zero.

-ou-

O comprimento de name é maior que o comprimento máximo definido pelo sistema.

-ou-

Somente .NET Framework: um módulo com o mesmo name já foi definido neste assembly.

name é null.

Somente .NET Core e .NET 5+: um módulo dinâmico já foi definido neste assembly.

O chamador não tem a permissão necessária.

O assembly do gravador de símbolo padrão não pode ser carregado.

-ou-

O tipo que implementa a interface de gravador de símbolo padrão não pode ser encontrado.

Exemplos

O exemplo de código abaixo demonstra como criar um módulo dinâmico transitório usando 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")

Comentários

Somente .NET Core e .NET 5+: não há suporte para assemblies vários módulos. Somente um módulo dinâmico pode ser definido em um assembly.

Somente .NET Framework: é um erro definir vários módulos dinâmicos com o mesmo nome em um assembly.

O módulo dinâmico definido é transitório. O módulo dinâmico não será salvo, mesmo que o assembly dinâmico pai tenha sido criado com RunAndSave.

Nota

Para suprimir otimizações ao depurar módulos dinâmicos, aplique o atributo DebuggableAttribute ao assembly dinâmico antes de chamar DefineDynamicModule. Crie uma instância de DebuggableAttribute com o sinalizador DisableOptimizations e aplique-a usando o método SetCustomAttribute. O atributo deve ser aplicado ao assembly dinâmico. Ele não terá efeito se aplicado ao módulo.

Nota

A partir do Service Pack 1 do .NET Framework 2.0, esse membro não requer mais ReflectionPermission com o sinalizador ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de segurança na emissão de reflexão.) Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a

DefineDynamicModule(String, Boolean)

Define um módulo dinâmico transitório nomeado neste assembly e especifica se as informações de símbolo devem ser emitidas.

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

Parâmetros

name
String

O nome do módulo dinâmico.

emitSymbolInfo
Boolean

true se as informações de símbolo devem ser emitidas; caso contrário, false.

Retornos

Um ModuleBuilder que representa o módulo dinâmico definido.

Exceções

name começa com espaço em branco.

-ou-

O comprimento de name é zero.

-ou-

O comprimento de name é maior que o comprimento máximo definido pelo sistema.

name é null.

O assembly do gravador de símbolo padrão não pode ser carregado.

-ou-

O tipo que implementa a interface de gravador de símbolo padrão não pode ser encontrado.

O chamador não tem a permissão necessária.

Exemplos

O exemplo de código abaixo demonstra como criar um módulo dinâmico transitório usando DefineDynamicModule, suprimindo informações de símbolo.

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)

Comentários

É um erro definir vários módulos dinâmicos com o mesmo nome em um assembly.

O módulo dinâmico não será salvo, mesmo que o assembly dinâmico pai tenha sido criado com RunAndSave.

Nota

Para suprimir otimizações ao depurar módulos dinâmicos, aplique o atributo DebuggableAttribute ao assembly dinâmico antes de chamar DefineDynamicModule. Crie uma instância de DebuggableAttribute com o sinalizador DisableOptimizations e aplique-a usando o método SetCustomAttribute. O atributo deve ser aplicado ao assembly dinâmico. Ele não terá efeito se aplicado ao módulo.

Nota

A partir do Service Pack 1 do .NET Framework 2.0, esse membro não requer mais ReflectionPermission com o sinalizador ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de segurança na emissão de reflexão.) Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a

DefineDynamicModule(String, String)

Define um módulo dinâmico persistente com o nome fornecido que será salvo no arquivo especificado. Nenhuma informação de símbolo é emitida.

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

Parâmetros

name
String

O nome do módulo dinâmico.

fileName
String

O nome do arquivo no qual o módulo dinâmico deve ser salvo.

Retornos

Um objeto ModuleBuilder que representa o módulo dinâmico definido.

Exceções

name ou fileName é null.

O comprimento de name ou fileName é zero.

-ou-

O comprimento de name é maior que o comprimento máximo definido pelo sistema.

-ou-

fileName contém uma especificação de caminho (um componente de diretório, por exemplo).

-ou-

Há um conflito com o nome de outro arquivo que pertence a esse assembly.

Esse assembly foi salvo anteriormente.

Esse assembly foi chamado em um assembly dinâmico com Run atributo.

O chamador não tem a permissão necessária.

O assembly do gravador de símbolo padrão não pode ser carregado.

-ou-

O tipo que implementa a interface de gravador de símbolo padrão não pode ser encontrado.

Exemplos

O exemplo de código abaixo demonstra como criar um módulo dinâmico persistente usando 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")

Comentários

Para definir um módulo dinâmico persistente, esse assembly precisa ser criado com o Save ou o atributo RunAndSave.

Se você quiser que o módulo contenha o manifesto do assembly, name deverá ser igual ao nome do assembly (ou seja, a propriedade AssemblyName.Name do AssemblyName usada para criar o assembly dinâmico) e fileName deverá ser igual ao nome do arquivo especificado ao salvar o assembly.

Em um assembly com apenas um módulo, esse módulo deve conter o manifesto do assembly.

Nota

Para suprimir otimizações ao depurar módulos dinâmicos, aplique o atributo DebuggableAttribute ao assembly dinâmico antes de chamar DefineDynamicModule. Crie uma instância de DebuggableAttribute com o sinalizador DisableOptimizations e aplique-a usando o método SetCustomAttribute. O atributo deve ser aplicado ao assembly dinâmico. Ele não terá efeito se aplicado ao módulo.

Nota

A partir do Service Pack 1 do .NET Framework 2.0, esse membro não requer mais ReflectionPermission com o sinalizador ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de segurança na emissão de reflexão.) Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a

DefineDynamicModule(String, String, Boolean)

Define um módulo dinâmico persistente, especificando o nome do módulo, o nome do arquivo para o qual o módulo será salvo e se as informações de símbolo devem ser emitidas usando o gravador de símbolo padrão.

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

Parâmetros

name
String

O nome do módulo dinâmico.

fileName
String

O nome do arquivo no qual o módulo dinâmico deve ser salvo.

emitSymbolInfo
Boolean

Se true, informações simbólicas serão gravadas usando o gravador de símbolos padrão.

Retornos

Um objeto ModuleBuilder que representa o módulo dinâmico definido.

Exceções

name ou fileName é null.

O comprimento de name ou fileName é zero.

-ou-

O comprimento de name é maior que o comprimento máximo definido pelo sistema.

-ou-

fileName contém uma especificação de caminho (um componente de diretório, por exemplo).

-ou-

Há um conflito com o nome de outro arquivo que pertence a esse assembly.

Esse assembly foi salvo anteriormente.

Esse assembly foi chamado em um assembly dinâmico com o atributo Run.

O assembly do gravador de símbolo padrão não pode ser carregado.

-ou-

O tipo que implementa a interface de gravador de símbolo padrão não pode ser encontrado.

O chamador não tem a permissão necessária.

Exemplos

O exemplo de código abaixo demonstra como criar um módulo dinâmico persistente com emissão de símbolo usando 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)

Comentários

Para definir um módulo dinâmico persistente, esse assembly precisa ser criado com o Save ou o atributo RunAndSave.

Se você quiser que o módulo contenha o manifesto do assembly, name deverá ser igual ao nome do assembly (ou seja, a propriedade AssemblyName.Name do AssemblyName usada para criar o assembly dinâmico) e fileName deverá ser igual ao nome do arquivo especificado ao salvar o assembly.

Em um assembly com apenas um módulo, esse módulo deve conter o manifesto do assembly.

Nota

Para suprimir otimizações ao depurar módulos dinâmicos, aplique o atributo DebuggableAttribute ao assembly dinâmico antes de chamar DefineDynamicModule. Crie uma instância de DebuggableAttribute com o sinalizador DisableOptimizations e aplique-a usando o método SetCustomAttribute. O atributo deve ser aplicado ao assembly dinâmico. Ele não terá efeito se aplicado ao módulo.

Nota

A partir do Service Pack 1 do .NET Framework 2.0, esse membro não requer mais ReflectionPermission com o sinalizador ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de segurança na emissão de reflexão.) Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a