AssemblyBuilder.DefineDynamicModule 方法

定义

在此程序集中定义动态模块。

重载

DefineDynamicModule(String)

在此程序集中定义命名的暂时动态模块。

DefineDynamicModule(String, Boolean)

在此程序集中定义一个暂时动态模块,并指定是否应发出符号信息。

DefineDynamicModule(String, String)

定义具有给定名称的持久动态模块,该模块将保存到指定文件中。 未发出符号信息。

DefineDynamicModule(String, String, Boolean)

定义一个持久的动态模块,指定模块名称、模块将保存到的文件的名称,并指定是否使用默认符号编写器发出符号信息。

DefineDynamicModule(String)

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

在此程序集中定义命名的暂时动态模块。

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

参数

name
String

动态模块的名称。

返回

一个表示定义的动态模块的 ModuleBuilder

例外

name 以空格开始。

- 或 -

name 的长度为零。

- 或 -

name 的长度超过系统定义的最大长度。

namenull

调用方没有所要求的权限。

无法加载默认符号编写器的程序集。

- 或 -

找不到实现默认符号编写器接口的类型。

示例

下面的代码示例演示如何使用 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")

注解

在程序集中定义多个具有相同名称的动态模块是错误的。

定义的动态模块是暂时性的。 动态模块不会保存,即使父动态程序集是使用 RunAndSave创建的。

注意

若要在调试动态模块时取消优化,请在调用 DefineDynamicModule之前将 特性应用于DebuggableAttribute动态程序集。 使用 DisableOptimizations 标志创建 实例DebuggableAttribute,并使用 SetCustomAttribute 方法应用它。 特性必须应用于动态程序集。 如果应用于模块,则它不起作用。

注意

从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。

适用于

DefineDynamicModule(String, Boolean)

在此程序集中定义一个暂时动态模块,并指定是否应发出符号信息。

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

参数

name
String

动态模块的名称。

emitSymbolInfo
Boolean

如果要发出符号信息,则为 true;否则为 false

返回

一个表示定义的动态模块的 ModuleBuilder

例外

name 以空格开始。

- 或 -

name 的长度为零。

- 或 -

name 的长度超过系统定义的最大长度。

namenull

无法加载默认符号编写器的程序集。

- 或 -

找不到实现默认符号编写器接口的类型。

调用方没有所要求的权限。

示例

下面的代码示例演示如何使用 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 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)

注解

在程序集中定义多个具有相同名称的动态模块是错误的。

动态模块不会保存,即使父动态程序集是使用 RunAndSave创建的。

注意

若要在调试动态模块时取消优化,请在调用 DefineDynamicModule之前将 特性应用于DebuggableAttribute动态程序集。 使用 DisableOptimizations 标志创建 实例DebuggableAttribute,并使用 SetCustomAttribute 方法应用它。 特性必须应用于动态程序集。 如果应用于模块,则它不起作用。

注意

从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。

适用于

DefineDynamicModule(String, String)

定义具有给定名称的持久动态模块,该模块将保存到指定文件中。 未发出符号信息。

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

参数

name
String

动态模块的名称。

fileName
String

动态模块应保存到的文件的名称。

返回

ModuleBuilder 对象,它表示定义的动态模块。

例外

namefileNamenull

namefileName 的长度为零。

- 或 -

name 的长度超过系统定义的最大长度。

- 或 -

fileName 包含路径说明(例如目录组件)。

- 或 -

与属于此程序集的另一个文件的名称发生冲突。

此程序集之前已经保存过。

此程序集已在具有 Run 属性的动态程序集上进行了调用。

调用方没有所要求的权限。

无法加载默认符号编写器的程序集。

- 或 -

找不到实现默认符号编写器接口的类型。

示例

下面的代码示例演示如何使用 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")

注解

若要定义可持久化动态模块,需要使用 或 RunAndSave 属性创建Save此程序集。

如果希望模块包含程序集清单, name 应与程序集名称 (AssemblyName.Name 即用于创建动态程序集的 属性 AssemblyName) ,并且 fileName 应与保存程序集时指定的文件名相同。

在只有一个模块的程序集中,该模块应包含程序集清单。

注意

若要在调试动态模块时取消优化,请在调用 DefineDynamicModule之前将 特性应用于DebuggableAttribute动态程序集。 使用 DisableOptimizations 标志创建 实例DebuggableAttribute,并使用 SetCustomAttribute 方法应用它。 特性必须应用于动态程序集。 如果应用于模块,则它不起作用。

注意

从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。

适用于

DefineDynamicModule(String, String, Boolean)

定义一个持久的动态模块,指定模块名称、模块将保存到的文件的名称,并指定是否使用默认符号编写器发出符号信息。

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

参数

name
String

动态模块的名称。

fileName
String

动态模块应保存到的文件的名称。

emitSymbolInfo
Boolean

如果为 true,则将使用默认符号编写器写入符号化信息。

返回

ModuleBuilder 对象,它表示定义的动态模块。

例外

namefileNamenull

namefileName 的长度为零。

- 或 -

name 的长度超过系统定义的最大长度。

- 或 -

fileName 包含路径说明(例如目录组件)。

- 或 -

与属于此程序集的另一个文件的名称发生冲突。

此程序集之前已经保存过。

此程序集已在具有 Run 属性的动态程序集上调用过。

无法加载默认符号编写器的程序集。

- 或 -

找不到实现默认符号编写器接口的类型。

调用方没有所要求的权限。

示例

下面的代码示例演示如何使用 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)

注解

若要定义可持久化动态模块,需要使用 或 RunAndSave 属性创建Save此程序集。

如果希望模块包含程序集清单, name 应与程序集名称 (AssemblyName.Name 即用于创建动态程序集的 属性 AssemblyName) ,并且 fileName 应与保存程序集时指定的文件名相同。

在只有一个模块的程序集中,该模块应包含程序集清单。

注意

若要在调试动态模块时取消优化,请在调用 DefineDynamicModule之前将 特性应用于DebuggableAttribute动态程序集。 使用 DisableOptimizations 标志创建 实例DebuggableAttribute,并使用 SetCustomAttribute 方法应用它。 特性必须应用于动态程序集。 如果应用于模块,则它不起作用。

注意

从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。

适用于