Compartir a través de


AssemblyBuilder.DefineDynamicModule Método

Definición

Define un módulo dinámico en este ensamblado.

Sobrecargas

DefineDynamicModule(String)

Define un módulo dinámico transitorio con nombre en este ensamblado.

DefineDynamicModule(String, Boolean)

Define un módulo dinámico transitorio con nombre en este ensamblado y especifica si se debe emitir información de símbolos.

DefineDynamicModule(String, String)

Define un módulo dinámico persistente con el nombre especificado que se guardará en el archivo especificado. No se emite información de símbolos.

DefineDynamicModule(String, String, Boolean)

Define un módulo dinámico persistente, especificando el nombre del módulo, el nombre del archivo en el que se guardará el módulo y si se debe emitir información de símbolos mediante el escritor de símbolos predeterminado.

DefineDynamicModule(String)

Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs

Define un módulo dinámico transitorio con nombre en este ensamblado.

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

Nombre del módulo dinámico.

Devoluciones

Un ModuleBuilder que representa el módulo dinámico definido.

Excepciones

name comienza con espacios en blanco.

-o-

La longitud de name es cero.

-o-

La longitud de name es mayor que la longitud máxima definida por el sistema.

-o-

Solo .NET Framework: ya se ha definido un módulo con la misma name en este ensamblado.

name es null.

Solo .NET Core y .NET 5+: ya se ha definido un módulo dinámico en este ensamblado.

El autor de la llamada no tiene el permiso necesario.

No se puede cargar el ensamblado para el escritor de símbolos predeterminado.

-o-

No se encuentra el tipo que implementa la interfaz predeterminada del escritor de símbolos.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un módulo dinámico transitorio mediante 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")

Comentarios

Solo .NET Core y .NET 5+: no se admiten ensamblados de varios módulos. Solo se puede definir un módulo dinámico en un ensamblado.

Solo .NET Framework: es un error definir varios módulos dinámicos con el mismo nombre en un ensamblado.

El módulo dinámico definido es transitorio. El módulo dinámico no se guarda, incluso si el ensamblado dinámico primario se creó con RunAndSave.

Nota

Para suprimir las optimizaciones al depurar módulos dinámicos, aplique el atributo DebuggableAttribute al ensamblado dinámico antes de llamar a DefineDynamicModule. Cree una instancia de DebuggableAttribute con la marca DisableOptimizations y aplíquela mediante el método SetCustomAttribute. El atributo debe aplicarse al ensamblado dinámico. No tiene ningún efecto si se aplica al módulo.

Nota

A partir de .NET Framework 2.0 Service Pack 1, este miembro ya no requiere ReflectionPermission con la marca ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de seguridad en la emisión de reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a

DefineDynamicModule(String, Boolean)

Define un módulo dinámico transitorio con nombre en este ensamblado y especifica si se debe emitir información de símbolos.

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

Nombre del módulo dinámico.

emitSymbolInfo
Boolean

true si se va a emitir información de símbolos; de lo contrario, false.

Devoluciones

Un ModuleBuilder que representa el módulo dinámico definido.

Excepciones

name comienza con espacios en blanco.

-o-

La longitud de name es cero.

-o-

La longitud de name es mayor que la longitud máxima definida por el sistema.

name es null.

No se puede cargar el ensamblado para el escritor de símbolos predeterminado.

-o-

No se encuentra el tipo que implementa la interfaz predeterminada del escritor de símbolos.

El autor de la llamada no tiene el permiso necesario.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un módulo dinámico transitorio mediante DefineDynamicModule, supresión de la información de símbolos.

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)

Comentarios

Es un error definir varios módulos dinámicos con el mismo nombre en un ensamblado.

El módulo dinámico no se guarda, incluso si el ensamblado dinámico primario se creó con RunAndSave.

Nota

Para suprimir las optimizaciones al depurar módulos dinámicos, aplique el atributo DebuggableAttribute al ensamblado dinámico antes de llamar a DefineDynamicModule. Cree una instancia de DebuggableAttribute con la marca DisableOptimizations y aplíquela mediante el método SetCustomAttribute. El atributo debe aplicarse al ensamblado dinámico. No tiene ningún efecto si se aplica al módulo.

Nota

A partir de .NET Framework 2.0 Service Pack 1, este miembro ya no requiere ReflectionPermission con la marca ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de seguridad en la emisión de reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a

DefineDynamicModule(String, String)

Define un módulo dinámico persistente con el nombre especificado que se guardará en el archivo especificado. No se emite información de símbolos.

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

Nombre del módulo dinámico.

fileName
String

Nombre del archivo en el que se debe guardar el módulo dinámico.

Devoluciones

Objeto ModuleBuilder que representa el módulo dinámico definido.

Excepciones

name o fileName es null.

La longitud de name o fileName es cero.

-o-

La longitud de name es mayor que la longitud máxima definida por el sistema.

-o-

fileName contiene una especificación de ruta de acceso (un componente de directorio, por ejemplo).

-o-

Hay un conflicto con el nombre de otro archivo que pertenece a este ensamblado.

Este ensamblado se ha guardado anteriormente.

Se llamó a este ensamblado en un ensamblado dinámico con Run atributo .

El autor de la llamada no tiene el permiso necesario.

No se puede cargar el ensamblado para el escritor de símbolos predeterminado.

-o-

No se encuentra el tipo que implementa la interfaz predeterminada del escritor de símbolos.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un módulo dinámico persistente mediante 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")

Comentarios

Para definir un módulo dinámico persistente, este ensamblado debe crearse con el Save o el atributo RunAndSave.

Si desea que el módulo contenga el manifiesto de ensamblado, name debe ser el mismo que el nombre del ensamblado (es decir, la propiedad AssemblyName.Name del AssemblyName usado para crear el ensamblado dinámico) y fileName debe ser el mismo que el nombre de archivo que especifique al guardar el ensamblado.

En un ensamblado con solo un módulo, ese módulo debe contener el manifiesto del ensamblado.

Nota

Para suprimir las optimizaciones al depurar módulos dinámicos, aplique el atributo DebuggableAttribute al ensamblado dinámico antes de llamar a DefineDynamicModule. Cree una instancia de DebuggableAttribute con la marca DisableOptimizations y aplíquela mediante el método SetCustomAttribute. El atributo debe aplicarse al ensamblado dinámico. No tiene ningún efecto si se aplica al módulo.

Nota

A partir de .NET Framework 2.0 Service Pack 1, este miembro ya no requiere ReflectionPermission con la marca ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de seguridad en la emisión de reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a

DefineDynamicModule(String, String, Boolean)

Define un módulo dinámico persistente, especificando el nombre del módulo, el nombre del archivo en el que se guardará el módulo y si se debe emitir información de símbolos mediante el escritor de símbolos predeterminado.

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

Nombre del módulo dinámico.

fileName
String

Nombre del archivo en el que se debe guardar el módulo dinámico.

emitSymbolInfo
Boolean

Si true, se escribe información simbólica mediante el escritor de símbolos predeterminado.

Devoluciones

Objeto ModuleBuilder que representa el módulo dinámico definido.

Excepciones

name o fileName es null.

La longitud de name o fileName es cero.

-o-

La longitud de name es mayor que la longitud máxima definida por el sistema.

-o-

fileName contiene una especificación de ruta de acceso (un componente de directorio, por ejemplo).

-o-

Hay un conflicto con el nombre de otro archivo que pertenece a este ensamblado.

Este ensamblado se ha guardado anteriormente.

Se llamó a este ensamblado en un ensamblado dinámico con el atributo Run.

No se puede cargar el ensamblado para el escritor de símbolos predeterminado.

-o-

No se encuentra el tipo que implementa la interfaz predeterminada del escritor de símbolos.

El autor de la llamada no tiene el permiso necesario.

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un módulo dinámico persistente con emisión de símbolos mediante 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)

Comentarios

Para definir un módulo dinámico persistente, este ensamblado debe crearse con el Save o el atributo RunAndSave.

Si desea que el módulo contenga el manifiesto de ensamblado, name debe ser el mismo que el nombre del ensamblado (es decir, la propiedad AssemblyName.Name del AssemblyName usado para crear el ensamblado dinámico) y fileName debe ser el mismo que el nombre de archivo que especifique al guardar el ensamblado.

En un ensamblado con solo un módulo, ese módulo debe contener el manifiesto del ensamblado.

Nota

Para suprimir las optimizaciones al depurar módulos dinámicos, aplique el atributo DebuggableAttribute al ensamblado dinámico antes de llamar a DefineDynamicModule. Cree una instancia de DebuggableAttribute con la marca DisableOptimizations y aplíquela mediante el método SetCustomAttribute. El atributo debe aplicarse al ensamblado dinámico. No tiene ningún efecto si se aplica al módulo.

Nota

A partir de .NET Framework 2.0 Service Pack 1, este miembro ya no requiere ReflectionPermission con la marca ReflectionPermissionFlag.ReflectionEmit. (Consulte problemas de seguridad en la emisión de reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a