AssemblyBuilder.DefineDynamicModule メソッド

定義

このアセンブリの動的モジュールを定義します。

オーバーロード

DefineDynamicModule(String)

このアセンブリの名前付き一時的な動的モジュールを定義します。

DefineDynamicModule(String, Boolean)

このアセンブリで名前付き一時的な動的モジュールを定義し、シンボル情報を出力するかどうかを指定します。

DefineDynamicModule(String, String)

指定したファイルに保存される、指定した名前の永続化可能な動的モジュールを定義します。 シンボル情報は出力されません。

DefineDynamicModule(String, String, Boolean)

永続化可能な動的モジュールを定義します。モジュール名、モジュールを保存するファイルの名前、および既定のシンボル ライターを使用してシンボル情報を出力するかどうかを指定します。

DefineDynamicModule(String)

ソース:
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

動的モジュールの名前。

戻り値

定義された動的モジュールを表す ModuleBuilder

例外

name は空白で始まります。

-又は-

name の長さは 0 です。

-又は-

name の長さがシステム定義の最大長を超えています。

-又は-

.NET Framework のみ: 同じ name を持つモジュールがこのアセンブリで既に定義されています。

namenullです。

.NET Core と .NET 5 以降のみ: このアセンブリには動的モジュールが既に定義されています。

呼び出し元に必要なアクセス許可がありません。

既定のシンボル ライターのアセンブリを読み込むことができません。

-又は-

既定のシンボル ライター インターフェイスを実装する型が見つかりません。

次のコード例は、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")

注釈

.NET Core および .NET 5 以降のみ: マルチモジュール アセンブリは、サポートされていません。 1 つのアセンブリで定義できる動的モジュールは 1 つだけです。

.NET Framework のみ: アセンブリ内で同じ名前を持つ複数の動的モジュールを定義するとエラーになります。

定義された動的モジュールは一時的なものです。 親動的アセンブリが RunAndSaveで作成された場合でも、動的モジュールは保存されません。

手記

動的モジュールのデバッグ時に最適化を抑制するには、DefineDynamicModuleを呼び出す前に、動的アセンブリに DebuggableAttribute 属性を適用します。 DisableOptimizations フラグを使用して DebuggableAttribute のインスタンスを作成し、SetCustomAttribute メソッドを使用して適用します。 この属性は動的アセンブリに適用する必要があります。 モジュールに適用しても効果はありません。

手記

.NET Framework 2.0 Service Pack 1 以降では、このメンバーは ReflectionPermissionFlag.ReflectionEmit フラグで ReflectionPermission する必要がなくなりました。 (リフレクション出力のセキュリティの問題 を参照してください)。この機能を使用するには、アプリケーションで .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 の長さは 0 です。

-又は-

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 以降では、このメンバーは ReflectionPermissionFlag.ReflectionEmit フラグで ReflectionPermission する必要がなくなりました。 (リフレクション出力のセキュリティの問題 を参照してください)。この機能を使用するには、アプリケーションで .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 または fileNamenull

name または fileName の長さは 0 です。

-又は-

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

注釈

永続化可能な動的モジュールを定義するには、Save または RunAndSave 属性を使用してこのアセンブリを作成する必要があります。

モジュールにアセンブリ マニフェストを含める場合、name はアセンブリの名前 (つまり、動的アセンブリの作成に使用される AssemblyNameAssemblyName.Name プロパティ) と同じにする必要があり、fileName アセンブリを保存するときに指定したファイル名と同じである必要があります。

モジュールが 1 つだけのアセンブリでは、そのモジュールにアセンブリ マニフェストを含める必要があります。

手記

動的モジュールのデバッグ時に最適化を抑制するには、DefineDynamicModuleを呼び出す前に、動的アセンブリに DebuggableAttribute 属性を適用します。 DisableOptimizations フラグを使用して DebuggableAttribute のインスタンスを作成し、SetCustomAttribute メソッドを使用して適用します。 この属性は動的アセンブリに適用する必要があります。 モジュールに適用しても効果はありません。

手記

.NET Framework 2.0 Service Pack 1 以降では、このメンバーは ReflectionPermissionFlag.ReflectionEmit フラグで ReflectionPermission する必要がなくなりました。 (リフレクション出力のセキュリティの問題 を参照してください)。この機能を使用するには、アプリケーションで .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 または fileNamenull

name または fileName の長さは 0 です。

-又は-

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)

注釈

永続化可能な動的モジュールを定義するには、Save または RunAndSave 属性を使用してこのアセンブリを作成する必要があります。

モジュールにアセンブリ マニフェストを含める場合、name はアセンブリの名前 (つまり、動的アセンブリの作成に使用される AssemblyNameAssemblyName.Name プロパティ) と同じにする必要があり、fileName アセンブリを保存するときに指定したファイル名と同じである必要があります。

モジュールが 1 つだけのアセンブリでは、そのモジュールにアセンブリ マニフェストを含める必要があります。

手記

動的モジュールのデバッグ時に最適化を抑制するには、DefineDynamicModuleを呼び出す前に、動的アセンブリに DebuggableAttribute 属性を適用します。 DisableOptimizations フラグを使用して DebuggableAttribute のインスタンスを作成し、SetCustomAttribute メソッドを使用して適用します。 この属性は動的アセンブリに適用する必要があります。 モジュールに適用しても効果はありません。

手記

.NET Framework 2.0 Service Pack 1 以降では、このメンバーは ReflectionPermissionFlag.ReflectionEmit フラグで ReflectionPermission する必要がなくなりました。 (リフレクション出力のセキュリティの問題 を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。

適用対象