ユーザー コードの読み込みと実行

ホストを記述する理由は、マネージ ユーザー コードを実行するためのアプリケーション環境を設定することにあります。このコンテキストでは、ユーザー コードとは、特にホストの一部ではないすべてのマネージ コードを意味します。たとえば Internet Explorer ホストにとって、ユーザー コードとは、HTML ページを構成するマネージ コントロールおよびスクリプトのことです。アプリケーション サーバー ホストにとっては、ユーザー コードは、アプリケーション サーバーが管理および実行する、企業のビジネス ルールが記述されているコードのことです。

すべてのマネージ コードは、Assembly クラスの一部です。そのため、マネージ コードの読み込みや実行に利用できるメソッドは、すべてアセンブリに基づいています。たとえば、System.AppDomain クラスおよび System.Reflection.Assembly クラスには、ホストがアセンブリを読み込むために必要なメソッドが含まれています。Load メソッドは、アセンブリ名を受け取るものや、アセンブリ マニフェストを格納したファイルへの完全ファイル システム パスを受け取るものなど、さまざまな形態になります。これらのメソッドは、既に作成され、ディスクに保存されているアセンブリを読み込むために使用されます。

たとえば、上で述べたアプリケーション サーバー ホストでは、アプリケーション サーバー プロセスに読み込まれて実行されるマネージ コードのビジネス ルールをユーザーが記述できると仮定します。特定のビジネス ルールのメソッドを実行する要求をアプリケーション サーバーが受け取ると、サーバー ランタイム ホスト コードは、そのコードをどのドメインで実行するか、または新しいドメインを作成するかどうかを決定します。次にランタイム ホスト コードは、アセンブリの Load メソッドのうちの 1 つを使って、ビジネス ルールを格納しているアセンブリを読み込み、リフレクションを使って、そのビジネス ルールのメソッドを実行します。詳細については、System.Reflection 名前空間のドキュメントを参照してください。

System.Reflection.Emit 名前空間にも、アセンブリを動的に作成するための型が用意されています。この方法によるアセンブリの読み込みは、アプリケーションがスクリプト コードを処理している場合には有用です。

たとえば、ワードプロセッサ プログラムでは、アプリケーションの動作をユーザーがカスタマイズするためのマクロ言語がサポートされている場合があります。ランタイムが読み込まれ、アプリケーション ドメインが作成されると、ワードプロセッサ プログラムは、マクロ スクリプトをマネージ コードにコンパイルし、System.Reflection.Emit を使用してアセンブリを作成します。これで、作成されたアセンブリがアプリケーション ドメインに読み込まれて実行できるようになります。実際の状況によっては、アセンブリはアプリケーションの有効期間にだけ存在し、ディスクには保存されない場合もあります。

参照

関連項目

AppDomain Class
System.Reflection.Assembly
System.Reflection.Emit Namespace

その他の技術情報

共通言語ランタイムのホスト