ホストの概要
.NET Framework アプリケーションは、ビルドに使用された共通言語ランタイム (CLR: Common Language Runtime) を自動的にホストします。 マネージ コードを .exe アセンブリとしてコンパイルする場合は、.exe が実行されるときに mscoree.dll によって自動的にランタイムが起動されます。 共通言語ランタイムをホストするメリットは、アンマネージ アプリケーションにもあります。 ランタイムには、インターネット インフォメーション サービス (IIS)、SQL Server 2005 などのアプリケーションを拡張するためのフレームワークが用意されています。
.exe マネージ アセンブリのように自動的に起動される場合でも、アンマネージ ホスト API を使用して読み込まれる場合でも、.NET Framework アプリケーションにはランタイム ホストと呼ばれるコード部分が必要です。 ランタイム ホストは、このランタイムをプロセスに読み込み、そのプロセス内にアプリケーション ドメインを作成し、これらのアプリケーション ドメインにユーザー コードを読み込んで実行します。
.NET Framework Version 2.0 を使用すると、CLR をホストするアプリケーションで、ランタイムの多くの機能を制御できます。 メモリの割り当て、アセンブリの読み込みなどの一部の機能は、カスタムの実装に置き換えることができます。 他の機能の動作の制御、ランタイムのイベントの通知の受け取り、およびアプリケーション ドメインの管理ができます。
.NET Framework Version 4 は、Version 2.0 ホスト API の多くの機能を統合しています。 また、.NET Framework 4 では、インプロセスのランタイム ホストの並行アクティブ化がサポートされており、他にも機能が強化されています。
この概要は、次のセクションで構成されています。
ホストされたランタイムの初期化および起動
管理インターフェイスをホストする .NET Framework Version 2.0
管理インターフェイスをホストする .NET Framework Version 4
アプリケーション ドメイン マネージャー
関連トピック
参照
ホストされたランタイムの初期化および起動
.NET Framework 4 ホスト API には、ICLRMetaHost インターフェイスを返すことができる CLRCreateInstance 関数があります。 このインターフェイスの GetRuntime メソッドを呼び出して、特定の CLR バージョンが指定された特定の ICLRRuntimeInfo インターフェイスを取得できます。 このプロシージャは、.NET Framework 2.0 ホスト API で使用される CorBindToRuntimeEx メソッドよりも優先されます。
.NET Framework Version 2.0 ホスト API には、ランタイムを初期化するための CorBindToRuntimeEx 関数があります。 読み込むランタイムを選択できますが、各プロセスでホストできるランタイムは 1 バージョンのみです。 Version 2.0、3.0、または 3.5 が読み込まれると、関数から ICLRRuntimeHost インターフェイスが返されます。このインターフェイスを使用して、ランタイムが起動され、マネージ コードが実行されます。
.NET Framework Version 1 ホスト API は、ICorRuntimeHost インターフェイスを提供します。
ランタイムの起動については「プロセスへの共通言語ランタイムの読み込み」を、マネージ コードの実行については「マネージ ホスト コードへの遷移」を参照してください。
ページのトップへ
管理インターフェイスをホストする .NET Framework 2.0
.NET Framework 2.0 の CLR には、ホストされるランタイムの多くの機能を制御するホスト管理インターフェイスが用意されています。また、ランタイムが提供する他の管理インターフェイスをホスト アプリケーションで実装したり、ユーザーが独自のホスト管理インターフェイスを実装したりできます。
検出という視点から、管理インターフェイスは次の 2 つに大きく分けられます。
ホストが実装し、ランタイムが IHostControl インターフェイスを使用して検出する管理インターフェイス
CLR で用意され、ホストが ICLRControl インターフェイスを使用して検出する管理インターフェイス
次の表は、用意されている機能別にインターフェイスをまとめたものです。 各グループで最も重要なインターフェイスが最初に記載されています。
グループ |
機能 |
インターフェイス |
---|---|---|
アセンブリ読み込み管理 |
アセンブリの読み込み元の場所、バージョン管理の方法、およびアセンブリの読み込み元の形式を、ホストがカスタマイズできるようにします。 たとえば、ハード ディスク上のファイルの代わりに、データベースからアセンブリを読み込むようにできます。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
ポリシー管理 |
さまざまな信頼性要件をサポートするために、プログラム エラーの処理方法をホストが指定できるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャーにアクセスし、IHostPolicyManager コールバックを実装してランタイムからのエラーを通知します。 |
|
ホスト保護管理 |
指定した型またはメンバーの使用を防止することにより、独自のプログラミング モデルをホストが適用できるようにします。 たとえば、ホストで、スレッド処理または同期プリミティブの使用を許可しないようにできます。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャーにアクセスします。 |
|
メモリ管理 |
CLR がメモリの割り当てに使用するオペレーティング システム関数を置き換えることにより、ホストがメモリの割り当てを制御できるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
ガベージ コレクション管理 |
ガベージ コレクションの開始および終了の通知を受け取るメソッドをホストが実装できるようにします。 コレクションの初期化、統計情報の収集、およびコレクションの一部の特性の指定をホストで行うことができるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャーにアクセスします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
デバッグ管理 |
追加のデバッグ情報を提供し、デバッグ タスクをカスタマイズするために、デバッガーがアタッチされているかどうかをホストが検出できるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャーにアクセスします。 |
|
CLR イベント管理 |
EClrEvent によって列挙されたイベントの通知をホストが登録できるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャーにアクセスし、IActionOnCLREvent インターフェイスを使用してそのイベント ハンドラーを実装します。 |
|
タスク管理 |
スレッドがマネージ コードとアンマネージ コードとの間で遷移したときに、ホストが通知を受けられるようにします。 タスクが起動および停止されるときのスレッドの関係の制御、およびタスクのスケジュール設定をホストが行うことができるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
スレッド プール管理 |
ランタイムが使用する独自のスレッド プールをホストが実装できるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
同期管理 |
ランタイムが使用する独自の同期プリミティブをホストが実装できるようにします。 イベント、クリティカル セクション、およびセマフォをホストが提供できます。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
I/O 完了管理 |
独自の非同期 I/O をホストが実装できるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
メモ |
---|
以前のバージョンのランタイムのホスト インターフェイスについては、「.NET Framework 1.0 および 1.1 のホスト インターフェイス」を参照してください。 |
ページのトップへ
管理インターフェイスをホストする .NET Framework Version 4
.NET Framework 4 は、次のインターフェイス内で 2.0 ホスト API を統合します。
ICLRMetaHost は、特定のバージョンの CLR を返し、インストールされているすべての CLR とすべてのインプロセス ランタイムを一覧表示し、アクティブ化インターフェイスを返し、アセンブリのコンパイルに使用する CLR バージョンを検出するメソッドを提供します。
ICLRMetaHostPolicy は、ポリシー条件、マネージ アセンブリ、バージョン、および構成ファイルに基づいて CLR インターフェイスを提供する GetRequestedRuntime メソッドを提供します。
ICLRRuntimeInfo は、バージョン、ディレクトリ、読み込みステータスなど、特定のランタイムに関する情報を返すメソッドを提供します。
ICLRStrongName は、MSCorEE.dll によって 1 つのインターフェイスにエクスポートされた、CLR Version 2.0 のすべての厳密な名前付けグローバル静的関数 (StrongNameErrorInfo を除く) をグループ化します。 すべての ICLRStrongName メソッドは、標準の COM HRESULTS を返します。
これらのインターフェイスは、.NET Framework 2.0 ホスト インターフェイスをカプセル化し、このインターフェイスの代わりに使用されます。
ページのトップへ
アプリケーション ドメイン マネージャー
共通言語ランタイムをホストするプログラムについては、アプリケーション ドメインがアセンブリを互いに分離することによって、信頼性を高めています。 アプリケーション ドメインをアンロードすることにより、アセンブリをプロセスからアンロードできます。
複数のアプリケーション ドメインを管理するため、.NET Framework には、AppDomainManager クラスが基本クラスとして用意されており、このクラスから独自のアプリケーション ドメイン マネージャーを派生させることができます。 ホスト アプリケーション用に設計するアプリケーション ドメイン マネージャーは、基本的にマネージ コード内のホストの拡張機能です。 これは、プロセス内で作成される各アプリケーション ドメイン内に自動的に読み込まれます。
アプリケーション ドメイン マネージャーにより、マネージ コードとアンマネージ コードとの間の遷移を削減することで、パフォーマンスを改善できます。 アプリケーション ドメイン マネージャーは、新しいアプリケーション ドメインが作成された時点で通知を受け取ることができるため、開発者はそれらのドメインを構成できます。 アプリケーション ドメイン マネージャーには、アンマネージ ホストからマネージ コードを呼び出す方法も用意されています。
ページのトップへ
関連トピック
タイトル |
説明 |
---|---|
ランタイムをプロセスに読み込んで初期化し、値を設定して、その動作を指定する方法について説明します。 |
|
アプリケーション ドメインをアンロードし、プロセスをシャットダウンする方法について説明します。 |
|
ロール ベースのセキュリティ ポリシーを設定する方法について説明します。 |
|
アプリケーション ドメイン レベルのセキュリティ ポリシーを設定する方法について説明します。 |
|
ユーザー コードを読み込み、実行する方法について説明します。 |
|
ユーザー コードを実行するアプリケーション ドメインを作成および構成する方法を説明します。 |
|
新しいアプリケーション ドメインの境界をどこに設定すればよいかを決定する方法について説明します。 |
|
マネージ ホスト コードとユーザー コードを実行するために、アンマネージ コードから遷移する方法について説明します。 |
|
アプリケーション構成ファイルで指定されているバージョン以外のバージョンのランタイムをアクティブ化する方法について説明します。 |
|
.NET Framework に組み込まれているホストについて説明します。 |
|
ホストが 1 つのプロセス内で実行されるコードを分離するために使用する構成について説明します。 |
|
アプリケーション、コンポーネント、またはランタイムの複数のバージョンの実行について説明します。 |
|
.NET Framework Version 4 でランタイムをホストするためのアンマネージ インターフェイスについて説明します。 |
|
.NET Framework Version 2.0 でランタイムをホストするためのアンマネージ インターフェイスについて説明します。 |
ページのトップへ
参照
ページのトップへ