AssemblyBuilder.DefineDynamicModule 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在此程序集中定义动态模块。
重载
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
为 null
。
调用方没有所要求的权限。
示例
下面的代码示例演示如何使用 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
为 null
。
调用方没有所要求的权限。
示例
下面的代码示例演示如何使用 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 对象,它表示定义的动态模块。
例外
name
或 fileName
为 null
。
name
或 fileName
的长度为零。
- 或 -
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 对象,它表示定义的动态模块。
例外
name
或 fileName
为 null
。
name
或 fileName
的长度为零。
- 或 -
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 或更高版本。
适用于
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈