Partilhar via


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