語言

AssemblyBuilder.DefineDynamicModule 方法

定義

在此元件中定義動態模組。

多載

名稱 Description
DefineDynamicModule(String)

在此元件中定義具名的暫時性動態模組。

DefineDynamicModule(String, Boolean)

定義這個元件中的具名暫時性動態模組,並指定是否應該發出符號資訊。

DefineDynamicModule(String, String)

使用將儲存至指定檔案的指定名稱,定義可保存的動態模組。 不會發出符號資訊。

DefineDynamicModule(String, String, Boolean)

定義可保存的動態模組、指定模組名稱、將儲存模組的檔名,以及是否應該使用預設符號寫入器發出符號資訊。

DefineDynamicModule(String)

來源:
AssemblyBuilder.cs
來源:
AssemblyBuilder.cs
來源:
AssemblyBuilder.cs
來源:
AssemblyBuilder.cs
來源:
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

動態模組的名稱。

傳回

A ModuleBuilder 代表定義的動態模。

例外狀況

name 以留白開始。

-或-

的 name 長度為零。

-或-

的 name 長度大於系統定義的最大長度。

-或-

僅限 .NET Framework:此組件中已定義有相同 name 模組。

name 是 null。

僅限 .NET Core 和 .NET 5+ :此元件中已定義動態模組。

來電者沒有所需的權限。

無法載入預設符號寫入器的元件。

-或-

找不到實作預設符號寫入器介面的類型。

範例

以下程式碼範例示範如何利用 DefineDynamicModule建立暫態動態模組。

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")

備註

僅限 .NET Core 與 .NET 5+: 不支援多模組組件。 元件中只能定義一個動態模組。

僅限 .NET Framework:在元件中定義多個具有相同名稱的動態模組是錯誤的。

定義的動態模組是暫時性的。 動態模組不會被儲存,即使父動態組件是用 RunAndSave建立的。

Note

在除錯動態模組時,為了抑制優化,請在呼叫DebuggableAttribute前將屬性套用DefineDynamicModule到動態組合。 建立一個帶DebuggableAttribute旗標的DisableOptimizations實例,並用該SetCustomAttribute方法套用。 屬性必須套用至動態元件。 如果套用至模組,則不會有任何作用。

適用於

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

傳回

A ModuleBuilder 代表定義的動態模。

例外狀況

name 以留白開始。

-或-

的 name 長度為零。

-或-

的 name 長度大於系統定義的最大長度。

name 是 null。

無法載入預設符號寫入器的元件。

-或-

找不到實作預設符號寫入器介面的類型。

來電者沒有所需的權限。

範例

以下程式碼範例示範如何利用 DefineDynamicModule來建立暫態動態模組,並抑制符號資訊。

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建立的。

Note

在除錯動態模組時,為了抑制優化,請在呼叫DebuggableAttribute前將屬性套用DefineDynamicModule到動態組合。 建立一個帶DebuggableAttribute旗標的DisableOptimizations實例,並用該SetCustomAttribute方法套用。 屬性必須套用至動態元件。 如果套用至模組,則不會有任何作用。

適用於

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 = 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")

備註

要定義一個可持久的動態模組,這個組合必須以 Save 或 RunAndSave 屬性建立。

如果你想讓模組包含組合清單, name 應該和組裝檔名稱相同(也就是 AssemblyName.Name 用來建立動態組裝的屬性 AssemblyName ),並且 fileName 應該和你儲存組裝時指定的檔名相同。

在只有一個模組的元件中,該模組應該包含元件指令清單。

Note

在除錯動態模組時,為了抑制優化,請在呼叫DebuggableAttribute前將屬性套用DefineDynamicModule到動態組合。 建立一個帶DebuggableAttribute旗標的DisableOptimizations實例,並用該SetCustomAttribute方法套用。 屬性必須套用至動態元件。 如果套用至模組,則不會有任何作用。

適用於

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 = 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)

備註

要定義一個可持久的動態模組,這個組合必須以 Save 或 RunAndSave 屬性建立。

如果你想讓模組包含組合清單, name 應該和組裝檔名稱相同(也就是 AssemblyName.Name 用來建立動態組裝的屬性 AssemblyName ),並且 fileName 應該和你儲存組裝時指定的檔名相同。

在只有一個模組的元件中,該模組應該包含元件指令清單。

Note

在除錯動態模組時,為了抑制優化,請在呼叫DebuggableAttribute前將屬性套用DefineDynamicModule到動態組合。 建立一個帶DebuggableAttribute旗標的DisableOptimizations實例,並用該SetCustomAttribute方法套用。 屬性必須套用至動態元件。 如果套用至模組,則不會有任何作用。

適用於