Bagikan melalui


AssemblyBuilder.DefineDynamicModule Metode

Definisi

Mendefinisikan modul dinamis dalam rakitan ini.

Overload

DefineDynamicModule(String)

Mendefinisikan modul dinamis sementara bernama dalam rakitan ini.

DefineDynamicModule(String, Boolean)

Menentukan modul dinamis sementara bernama dalam perakitan ini dan menentukan apakah informasi simbol harus dipancarkan.

DefineDynamicModule(String, String)

Menentukan modul dinamis yang dapat dipertahankan dengan nama tertentu yang akan disimpan ke file yang ditentukan. Tidak ada informasi simbol yang dipancarkan.

DefineDynamicModule(String, String, Boolean)

Menentukan modul dinamis yang dapat dipertahankan, menentukan nama modul, nama file tempat modul akan disimpan, dan apakah informasi simbol harus dipancarkan menggunakan penulis simbol default.

DefineDynamicModule(String)

Sumber:
AssemblyBuilder.cs
Sumber:
AssemblyBuilder.cs
Sumber:
AssemblyBuilder.cs

Mendefinisikan modul dinamis sementara bernama dalam rakitan ini.

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

Parameter

name
String

Nama modul dinamis.

Mengembalikan

ModuleBuilder yang mewakili modul dinamis yang ditentukan.

Pengecualian

name dimulai dengan spasi kosong.

-atau-

Panjang name adalah nol.

-atau-

Panjang name lebih besar dari panjang maksimum yang ditentukan sistem.

-atau-

.NET Framework saja: Modul dengan name yang sama telah ditentukan dalam rakitan ini.

.NET Core dan .NET 5+ saja: Modul dinamis telah ditentukan dalam rakitan ini.

Pemanggil tidak memiliki izin yang diperlukan.

Rakitan untuk penulis simbol default tidak dapat dimuat.

-atau-

Tipe yang mengimplementasikan antarmuka penulis simbol default tidak dapat ditemukan.

Contoh

Contoh kode di bawah ini menunjukkan cara membuat modul dinamis sementara menggunakan 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")

Keterangan

Hanya .NET Core dan .NET 5+: rakitan Multi-modul tidak didukung. Hanya satu modul dinamis yang dapat didefinisikan dalam rakitan.

.NET Framework saja: Ini adalah kesalahan untuk menentukan beberapa modul dinamis dengan nama yang sama dalam rakitan.

Modul dinamis yang ditentukan bersifat sementara. Modul dinamis tidak disimpan, bahkan jika rakitan dinamis induk dibuat dengan RunAndSave.

Nota

Untuk menekan pengoptimalan saat men-debug modul dinamis, terapkan atribut DebuggableAttribute ke rakitan dinamis sebelum memanggil DefineDynamicModule. Buat instans DebuggableAttribute dengan bendera DisableOptimizations dan terapkan menggunakan metode SetCustomAttribute. Atribut harus diterapkan ke rakitan dinamis. Ini tidak berpengaruh jika diterapkan ke modul.

Nota

Dimulai dengan .NET Framework 2.0 Service Pack 1, anggota ini tidak lagi memerlukan ReflectionPermission dengan bendera ReflectionPermissionFlag.ReflectionEmit. (Lihat Masalah Keamanan dalam Pantulan.) Untuk menggunakan fungsionalitas ini, aplikasi Anda harus menargetkan .NET Framework 3.5 atau yang lebih baru.

Berlaku untuk

DefineDynamicModule(String, Boolean)

Menentukan modul dinamis sementara bernama dalam perakitan ini dan menentukan apakah informasi simbol harus dipancarkan.

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

Parameter

name
String

Nama modul dinamis.

emitSymbolInfo
Boolean

true jika informasi simbol akan dipancarkan; jika tidak, false.

Mengembalikan

ModuleBuilder yang mewakili modul dinamis yang ditentukan.

Pengecualian

name dimulai dengan spasi kosong.

-atau-

Panjang name adalah nol.

-atau-

Panjang name lebih besar dari panjang maksimum yang ditentukan sistem.

Rakitan untuk penulis simbol default tidak dapat dimuat.

-atau-

Tipe yang mengimplementasikan antarmuka penulis simbol default tidak dapat ditemukan.

Pemanggil tidak memiliki izin yang diperlukan.

Contoh

Contoh kode di bawah ini menunjukkan cara membuat modul dinamis sementara menggunakan DefineDynamicModule, menekan informasi simbol.

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)

Keterangan

Ini adalah kesalahan untuk menentukan beberapa modul dinamis dengan nama yang sama dalam rakitan.

Modul dinamis tidak disimpan, bahkan jika rakitan dinamis induk dibuat dengan RunAndSave.

Nota

Untuk menekan pengoptimalan saat men-debug modul dinamis, terapkan atribut DebuggableAttribute ke rakitan dinamis sebelum memanggil DefineDynamicModule. Buat instans DebuggableAttribute dengan bendera DisableOptimizations dan terapkan menggunakan metode SetCustomAttribute. Atribut harus diterapkan ke rakitan dinamis. Ini tidak berpengaruh jika diterapkan ke modul.

Nota

Dimulai dengan .NET Framework 2.0 Service Pack 1, anggota ini tidak lagi memerlukan ReflectionPermission dengan bendera ReflectionPermissionFlag.ReflectionEmit. (Lihat Masalah Keamanan dalam Pantulan.) Untuk menggunakan fungsionalitas ini, aplikasi Anda harus menargetkan .NET Framework 3.5 atau yang lebih baru.

Berlaku untuk

DefineDynamicModule(String, String)

Menentukan modul dinamis yang dapat dipertahankan dengan nama tertentu yang akan disimpan ke file yang ditentukan. Tidak ada informasi simbol yang dipancarkan.

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

Parameter

name
String

Nama modul dinamis.

fileName
String

Nama file tempat modul dinamis harus disimpan.

Mengembalikan

Objek ModuleBuilder yang mewakili modul dinamis yang ditentukan.

Pengecualian

name atau fileNamenull.

Panjang name atau fileName adalah nol.

-atau-

Panjang name lebih besar dari panjang maksimum yang ditentukan sistem.

-atau-

fileName berisi spesifikasi jalur (komponen direktori, misalnya).

-atau-

Ada konflik dengan nama file lain yang termasuk dalam assembly ini.

Rakitan ini sebelumnya telah disimpan.

Rakitan ini dipanggil pada rakitan dinamis dengan atribut Run.

Pemanggil tidak memiliki izin yang diperlukan.

Rakitan untuk penulis simbol default tidak dapat dimuat.

-atau-

Tipe yang mengimplementasikan antarmuka penulis simbol default tidak dapat ditemukan.

Contoh

Contoh kode di bawah ini menunjukkan cara membuat modul dinamis persisten menggunakan 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")

Keterangan

Untuk menentukan modul dinamis yang dapat dipertahankan, rakitan ini perlu dibuat dengan atribut Save atau RunAndSave.

Jika Anda ingin modul berisi manifes perakitan, name harus sama dengan nama assembly (yaitu, properti AssemblyName.Name dari AssemblyName yang digunakan untuk membuat rakitan dinamis) dan fileName harus sama dengan nama file yang Anda tentukan saat Anda menyimpan assembly.

Dalam rakitan hanya dengan satu modul, modul tersebut harus berisi manifes perakitan.

Nota

Untuk menekan pengoptimalan saat men-debug modul dinamis, terapkan atribut DebuggableAttribute ke rakitan dinamis sebelum memanggil DefineDynamicModule. Buat instans DebuggableAttribute dengan bendera DisableOptimizations dan terapkan menggunakan metode SetCustomAttribute. Atribut harus diterapkan ke rakitan dinamis. Ini tidak berpengaruh jika diterapkan ke modul.

Nota

Dimulai dengan .NET Framework 2.0 Service Pack 1, anggota ini tidak lagi memerlukan ReflectionPermission dengan bendera ReflectionPermissionFlag.ReflectionEmit. (Lihat Masalah Keamanan dalam Pantulan.) Untuk menggunakan fungsionalitas ini, aplikasi Anda harus menargetkan .NET Framework 3.5 atau yang lebih baru.

Berlaku untuk

DefineDynamicModule(String, String, Boolean)

Menentukan modul dinamis yang dapat dipertahankan, menentukan nama modul, nama file tempat modul akan disimpan, dan apakah informasi simbol harus dipancarkan menggunakan penulis simbol default.

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

Parameter

name
String

Nama modul dinamis.

fileName
String

Nama file tempat modul dinamis harus disimpan.

emitSymbolInfo
Boolean

Jika true, informasi simbolis ditulis menggunakan penulis simbol default.

Mengembalikan

Objek ModuleBuilder yang mewakili modul dinamis yang ditentukan.

Pengecualian

name atau fileNamenull.

Panjang name atau fileName adalah nol.

-atau-

Panjang name lebih besar dari panjang maksimum yang ditentukan sistem.

-atau-

fileName berisi spesifikasi jalur (komponen direktori, misalnya).

-atau-

Ada konflik dengan nama file lain yang termasuk dalam assembly ini.

Rakitan ini sebelumnya telah disimpan.

Rakitan ini dipanggil pada rakitan dinamis dengan atribut Run.

Rakitan untuk penulis simbol default tidak dapat dimuat.

-atau-

Tipe yang mengimplementasikan antarmuka penulis simbol default tidak dapat ditemukan.

Pemanggil tidak memiliki izin yang diperlukan.

Contoh

Contoh kode di bawah ini menunjukkan cara membuat modul dinamis persisten dengan emisi simbol menggunakan 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)

Keterangan

Untuk menentukan modul dinamis yang dapat dipertahankan, rakitan ini perlu dibuat dengan atribut Save atau RunAndSave.

Jika Anda ingin modul berisi manifes perakitan, name harus sama dengan nama assembly (yaitu, properti AssemblyName.Name dari AssemblyName yang digunakan untuk membuat rakitan dinamis) dan fileName harus sama dengan nama file yang Anda tentukan saat Anda menyimpan assembly.

Dalam rakitan hanya dengan satu modul, modul tersebut harus berisi manifes perakitan.

Nota

Untuk menekan pengoptimalan saat men-debug modul dinamis, terapkan atribut DebuggableAttribute ke rakitan dinamis sebelum memanggil DefineDynamicModule. Buat instans DebuggableAttribute dengan bendera DisableOptimizations dan terapkan menggunakan metode SetCustomAttribute. Atribut harus diterapkan ke rakitan dinamis. Ini tidak berpengaruh jika diterapkan ke modul.

Nota

Dimulai dengan .NET Framework 2.0 Service Pack 1, anggota ini tidak lagi memerlukan ReflectionPermission dengan bendera ReflectionPermissionFlag.ReflectionEmit. (Lihat Masalah Keamanan dalam Pantulan.) Untuk menggunakan fungsionalitas ini, aplikasi Anda harus menargetkan .NET Framework 3.5 atau yang lebih baru.

Berlaku untuk