アプリケーション ドメインの境界の決定
ホスト コードがアンマネージ コードからマネージ コードに遷移すると、ユーザー コードを実行するための新しいアプリケーション ドメインが 1 つ以上作成されます。 アプリケーション ドメインは、ホストが 1 つのプロセス内で実行されるコードを分離するために使用する構成要素です。 この分離は、対話的に動作するようにはデザインされていないコードが、他のコードと対話できないようにするために必要です。 たとえば、異なる 2 つの Web サイトから Internet Explorer ホストにダウンロードされたコードは、それぞれ別個に扱われる必要があります。 Internet Explorer ホストは、この分離を確保するため、サイトごとにアプリケーション ドメインを作成します。
ホストでは、ユーザー コードを実行するアプリケーション ドメインを作成する前に、新しいアプリケーション ドメインの境界をどこに設定するかを決定する必要があります。 この決定に影響を与える要因には、特定の型から他の型へのアクセスを制限するための要件、構成、セキュリティ、およびコードが不要になったときにアンロードする機能などがあります。
型へのアクセスの制限
アプリケーション ドメインで実行されている型は、そのドメインで実行されている別の型を検出し、直接呼び出すことができます。 ただし、別のアプリケーション ドメインで実行されている型を検出したり、呼び出したりすることはできません。 ある型から別の型へのアクセスを制限する機能は、ドメインの境界を決定する上で、主要な検討事項です。
構成の設定
アプリケーション ドメインは、このランタイムの構成の主要な単位です。 各アプリケーション ドメインには、そのドメインで実行されるコードに関する設定を記述したオプションの構成ファイルが関連付けられています。
たとえば、構成ファイルには、プライベート アセンブリを検索するディレクトリのリスト、共有アセンブリのバージョン バインディング情報、リモート処理可能な型の場所などを含めることができます。
セキュリティ
ホストはドメインに対して、コード アクセス セキュリティ ポリシーと、ロール ベース セキュリティ ポリシーの両方を設定できます。 これによりホストは、特定のドメイン内のコードに付与するアクセス許可のセットを制御したり、ロール ベース セキュリティ用に現在のスレッドのプリンシパルと既定のプリンシパルの両方を設定できます。
たとえば、ホストはアプリケーション ドメイン レベルでコード アクセス セキュリティ ポリシーを定義し、特定のサイトからダウンロードされたコードだけをそのドメインで実行できるようにすることができます。 また、ロール ベース セキュリティ プリンシパルを設定して、カスタム認証方式を実装することもできます。
コードのアンロード
メモリを他の用途に使用するために、プロセス内で実行されているマネージ コードをメモリからアンロードするには、ホストはそのコードが実行されているアプリケーション ドメインをアンロードする必要があります。 アセンブリや型を個別にアンロードすることはできません。 ホストには、ユーザー コードをアンロードできる時期を管理する独自の規則があります。 たとえばインターネット ブラウザーが、サイトによって決まるドメインにマネージ コントロールを読み込んだとします。 ブラウザーには、[進む] ボタンや [戻る] ボタンの応答が速くなるように、直前に参照したページをメモリに保持する規則があるとします。 ブラウザーは、あるページをもうメモリに保持する必要がないと判断すると、アプリケーション ドメインを削除し、その結果マネージ コントロールのコードも削除します。