次の方法で共有


リフレクション出力の技術サンプル

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

このサンプルでは、リフレクション出力の使用例を示します。 リフレクション出力は、動的アセンブリ、モジュール、および型をコードで作成できるようにする、ランタイム機能です。 これらの型のインスタンスを動的に作成して使用したり、リフレクション出力を使用してアセンブリを生成し、それを実行可能ファイルや DLL としてディスクに保存したりできます。 このサンプルは、次の 2 つの実行可能ファイルで構成されます。 第 1 の実行可能ファイル EmitAssembly.exe は、動的型を生成してテストするか、動的型を生成してディスクに DLL として保存します。 2 つ目を実行可能ファイル TestEmittedAssembly.exe、単に動的に、EmitAssembly.exe によって出力アセンブリを調べます。 EmitAssembly.exe によって出力の種類は"HelloWorld"という単純なクラス 持つコンストラクタはパラメータを 1 つの文字列。 また、この型により GetGreeting() メソッドが実装されます。このメソッドは、インスタンス コンストラクタに渡された文字列を返します。

サンプルの使用については、次のトピックを参照してください。

コマンド プロンプトを使用してサンプルをビルドするには

  1. コマンド プロンプト ウィンドウを開き、サンプルの使用言語に対応するサブディレクトリに移動します。

  2. 使用するプログラミング言語に応じて、コマンド ラインで「msbuild ReflectionEmitCS.sln」または「msbuild ReflectionEmitVB.sln」と入力します。

  3. EmitAssembly クラスをコンパイルしてテスト アセンブリをビルドします。 使用するプログラミング言語に応じて、コマンド ラインで 「csc /target:library EmitAssembly.cs」または「vbc /target:library TestEmittedAssembly.vb」と入力します。 結果として EmitAssembly.dll ファイルが出力されます。

Visual Studio を使用してサンプルをビルドするには

  1. Windows エクスプローラを開き、このサンプルの使用言語に対応するサブディレクトリに移動します。

  2. 使用するプログラミング言語に応じて、ReflectionEmitCS.sln のアイコンまたは ReflectionEmitVB.sln のアイコンをダブルクリックして、そのファイルを Visual Studio で開きます。

  3. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  4. EmitAssembly クラスをビルドしてテスト アセンブリをビルドします。 EmitAssembly.cs ファイルまたは EmitAssembly.vb ファイルを使用して Class Library プロジェクトを作成し、プロジェクトをビルドします。 結果として EmitAssembly.dll ファイルが出力されます。

サンプルを実行するには

  1. コマンド プロンプト ウィンドウを開き、新しい実行可能ファイルが格納されているディレクトリに移動します。

  2. コマンド ラインで、「EmitAssembly.exe」と入力し、続けてパラメータとして渡す値を入力します。

注意

このサンプルでは、コンソール アプリケーションをビルドします。出力を表示するには、これをコマンド プロンプト ウィンドウで実行する必要があります。

解説

リフレクション出力の詳細については、ソース コード ファイルのコメントを参照してください。

注意

MsBuild ツールは 2 つの実行可能ファイルを作成します。EmitAssembly.exe と TestEmittedAssembly.exe。ただし、TestEmittedAssembly.exe をビルドする、コンパイラできる必要がありますを参照アセンブリ"EmittedAssembly.dll"を開きます。EmitAssembly.exe がビルドされると、MsBuild ツールは EmitAssembly を実行しますが、その際、コマンド ライン パラメータとして "2" を指定します。これは、サンプルに動的アセンブリを出力させる指定です。

EmitAssembly 実行可能ファイルは、実行するテストを示すコマンド ライン パラメータを受け取ります。 値が 1 の場合、サンプルは動的型を AppDomain に出力し、サンプルに含まれている静的メンバをテストします。 値が 2 の場合、サンプルは動的型をアセンブリに出力し、そのアセンブリをディスクに .DLL ファイルおよび .MOD ファイルとして保存します。 これを実行した後、TestEmittedAssembly.exe または ILDasm.exe を実行して出力されたコードをテストできます。

以下に例を示します。

TestEmittedAssembly.exe

ILDasm EmittedModule.mod

値が 3 の場合、サンプルは動的型をアセンブリに出力し、最初の動的型のコードをテストする別の動的型を出力します。

このサンプルでは、次の技術およびクラスを使用します。

  • AppDomain このサンプルでは、AppDomain 型を使用して、動的アセンブリをサンプルの AppDomain に作成します。 これは、DefineDynamicAssembly メソッドを呼び出すことで行われます。

  • AssemblyBuilder 動的アセンブリをビルドするために使用します。 これを使用すると、すぐに使用できるアセンブリを作成できます。または、動的アセンブリを DLL ファイルまたは EXE ファイルとして保存できます。

  • AssemblyName アセンブリの一意の ID を定義するために使用します。 このサンプルでは、この型を最も単純な形で使用し、動的アセンブリにテキスト名 "EmittedAssembly" を指定します。

  • ModuleBuilder 動的アセンブリで動的モジュールをビルドするために使用します。

  • TypeBuilder 型を動的にビルドするために使用します。 この型は Type から派生します。 ここから、FieldBuilderConstructorBuilder、および MethodBuilder の各型のインスタンスを要求できます。 このサンプルでは、これらの型を使用して完全な型を生成します。

  • FieldBuilder 動的型にフィールドを作成するために使用します。

  • ConstructorBuilder 動的型にコンストラクタを定義するために使用します。

  • MethodBuilder 動的型でメソッドを定義するために使用します。

  • ILGenerator MethodBuilderConstructorBuilder のどちらも GetILGenerator メソッドを実装します。 これらのメソッドは、ILGenerator 型のインスタンスを返します。このインスタンスは、型の Microsoft Intermediate Language (MSIL) コードを動的に生成するために使用します。

  • Thread 現在のスレッドの AppDomain 型のインスタンスを取得するために使用します。

See Also

Reference

AppDomain

AssemblyBuilder

AssemblyBuilderAccess

AssemblyName

ConstructorBuilder

FieldBuilder

ILGenerator

MethodAttributes

MethodBuilder

MethodInfo

ModuleBuilder

ResolveEventHandler

System.IO

System.Reflection

System.Reflection.Emit

System.Threading

TypeBuilder

Other Resources

リフレクション

動的メソッドおよびアセンブリの出力

動的なソース コードの生成とコンパイル

イベントの処理と発生

マネージ イベントとアンマネージ イベント