AssemblyLoadContext クラス

定義

アセンブリ読み込みに関するランタイムのスコープの概念を表します。Represents the runtime's concept of a scope for assembly loading.

public ref class AssemblyLoadContext abstract
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public MustInherit Class AssemblyLoadContext
継承
AssemblyLoadContext

注釈

AssemblyLoadContext は、読み込みコンテキストを表します。The AssemblyLoadContext represents a load context. 概念的には、読み込みコンテキストによって、アセンブリのセットを読み込み、解決、およびアンロードするためのスコープが作成されます。Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext は抽象クラスです。AssemblyLoadContext is an abstract class. 具象クラスを作成するには、AssemblyLoadContext.Load(AssemblyName) を実装する必要があります。The AssemblyLoadContext.Load(AssemblyName) needs to be implemented to create a concrete class.

AssemblyLoadContext は、主にアセンブリの読み込みの分離を提供するために存在します。The AssemblyLoadContext exists primarily to provide assembly loading isolation. これにより、同じアセンブリの複数のバージョンを1つのプロセス内に読み込むことができます。It allows multiple versions of the same assembly to be loaded within a single process. これにより、.NET Framework 内の複数の AppDomain インスタンスによって提供される分離メカニズムが置き換えられます。It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

注意

AssemblyLoadContext では、セキュリティ機能は提供されません。AssemblyLoadContext does not provide any security features. すべてのコードには、プロセスの完全なアクセス許可があります。All code has full permissions of the process.

ランタイムでの使用Usage in the runtime

ランタイムは、次の2つのアセンブリ読み込みコンテキストを実装します。The runtime implements two assembly load contexts:

  • AssemblyLoadContext.Default は、アプリケーションのメインアセンブリとその静的依存関係に使用されるランタイムの既定のコンテキストを表します。AssemblyLoadContext.Default represents the runtime's default context which is used for the application main assembly and its static dependencies.
  • Assembly.LoadFile(String) メソッドは、最も基本的な AssemblyLoadContextをインスタンス化することによって、読み込まれるアセンブリを分離します。The Assembly.LoadFile(String) method isolates the assemblies it loads by instantiating the most basic AssemblyLoadContext. これには単純な分離方式があり、各アセンブリを独自の AssemblyLoadContext で読み込み、依存関係を解決しません。It has a simplistic isolation scheme which loads each assembly in its own AssemblyLoadContext with no dependency resolution.

アプリケーションの使用状況Application usage

アプリケーションで独自の AssemblyLoadContext を作成して、高度なシナリオ用のカスタムソリューションを作成することができます。An application can create its own AssemblyLoadContext to create a custom solution for advanced scenarios. カスタマイズでは、依存関係の解決メカニズムの定義に焦点を当てます。The customization focuses on defining dependency resolution mechanisms.

AssemblyLoadContext には、マネージアセンブリ解決を実装するための2つの拡張ポイントが用意されています。The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. AssemblyLoadContext.Load(AssemblyName) は、AssemblyLoadContext がアセンブリを解決し、それを読み込んで返すことを初めて行う機会を提供します。The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. AssemblyLoadContext.Load(AssemblyName)nullを返した場合、ローダーは AssemblyLoadContext.Defaultにアセンブリを読み込もうとします。If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. AssemblyLoadContext.Default がアセンブリを解決できない場合、元の AssemblyLoadContext はアセンブリを解決する機会を1つ取得します。If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. ランタイムは、Resolving イベントを発生させます。The runtime raises the Resolving event.

また AssemblyLoadContext.LoadUnmanagedDll(String) 仮想メソッドを使用すると、既定のアンマネージアセンブリ解決をカスタマイズできます。Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. 既定の実装では null が返されます。これにより、ランタイム検索では、ほとんどのシナリオに十分な既定の検索ポリシーが使用されます。The default implementation returns null, which causes the runtime search to use its default search policy which is sufficient for most scenarios.

技術的な課題Technical challenges

  • 1つのプロセスで複数のバージョンのランタイムを読み込むことはできません。It is not possible to load multiple versions of the runtime in a single process.

    注意事項

    複数のコピーまたは異なるバージョンのフレームワークアセンブリを読み込むと、予期しない動作の診断が困難になる可能性があります。Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard to diagnose behavior.

    ヒント

    この分離の問題を解決するには、リモート処理またはプロセス間通信でプロセス境界を使用します。Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • アセンブリの読み込みのタイミングによって、テストとデバッグが困難になる場合があります。The timing of assembly loading can make testing and debugging difficult. アセンブリは通常、依存関係が直ちに解決されることなく読み込まれます。Assemblies are typically loaded without their dependencies immediately being resolved. 依存関係は、必要に応じて読み込まれます。The dependencies are loaded as they are needed:

    • コードが依存アセンブリに分岐する場合。When code branches into a dependent assembly.
    • コードがリソースを読み込むとき。When code loads resources.
    • コードによってアセンブリが明示的に読み込まれるとき。When code explicitly loads assemblies.
  • AssemblyLoadContext.Load(AssemblyName) の実装によって新しい依存関係が追加されるため、別のバージョンを使用できるように分離する必要がある場合があります。The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. 最も自然な実装では、これらの依存関係が既定のコンテキストに配置されます。The most natural implementation would place these dependencies in the default context. 慎重に設計すると、新しい依存関係を分離できます。Careful design can isolate the new dependencies.

  • 同じアセンブリが異なるコンテキストに複数回読み込まれています。The same assembly is loaded multiple times into different contexts.

    • これにより、"型 ' Sample. Plugin' のオブジェクトを ' Sample. Plugin' 型にキャストできません" など、エラーメッセージが混乱する可能性があります。This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'."
    • 分離の境界を越えたマーシャリングは、簡単ではありません。Marshaling across isolation boundaries is non-trivial. 一般的な解決策は、既定の読み込みコンテキストにのみ読み込まれるアセンブリで定義されているインターフェイスを使用することです。A typical solution would be to use an interface defined in an assembly which is only loaded into the default load context.

コンストラクター

AssemblyLoadContext()

AssemblyLoadContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the AssemblyLoadContext class.

AssemblyLoadContext(Boolean)

アンロードが有効かどうかを示す値を使用して、AssemblyLoadContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

AssemblyLoadContext(String, Boolean)

アンロードが有効かどうかを示す名前と値を使用して、AssemblyLoadContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

プロパティ

All

AssemblyLoadContext のすべてのインスタンスのコレクションを返します。Returns a collection of all AssemblyLoadContext instances.

Assemblies

AssemblyLoadContext に読み込まれた Assembly インスタンスのコレクションを返します。Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext

EnterContextualReflection() への一番最近の呼び出しを使用して、AssemblyLoadContext セットを取得します。Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

Default

既定の AssemblyLoadContext を取得します。Gets the default AssemblyLoadContext. 既定のコンテキストには、メイン アプリケーション アセンブリとその静的依存関係が含まれます。The default context contains the main application assembly and its static dependencies.

IsCollectible

この AssemblyLoadContext が収集可能かどうかを示す値を取得します。Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name

AssemblyLoadContext の名前を取得します。Get the name of the AssemblyLoadContext.

メソッド

EnterContextualReflection()

CurrentContextualReflectionContextthisAssemblyLoadContext に設定します。Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

アセンブリをロードした AssemblyLoadContextCurrentContextualReflectionContext を設定します。Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(継承元 Object)
Finalize()

オブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

GetAssemblyName(String)

アセンブリ パスの AssemblyName を取得します。Gets an AssemblyName for an assembly path.

GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetLoadContext(Assembly)

指定された Assembly を含む AssemblyLoadContext を取得します。Gets the AssemblyLoadContext containing the specified Assembly.

GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
Load(AssemblyName)

派生クラス内でオーバーライドされると、AssemblyName に基づいてアセンブリを解決して読み込むことができます。When overridden in a derived class, allows an assembly to be resolved and loaded based on its AssemblyName.

LoadFromAssemblyName(AssemblyName)

AssemblyName を指定してアセンブリを解決して読み込みます。Resolves and loads an assembly given its AssemblyName.

LoadFromAssemblyPath(String)

指定したパスのアセンブリ ファイルの内容を読み込みます。Loads the contents of an assembly file on the specified path.

LoadFromNativeImagePath(String, String)

指定したパスにあるマネージド アセンブリ ファイルのネイティブ イメージの内容を読み込みます。Loads the contents of the native image of a managed assembly file on the specified path.

LoadFromStream(Stream)

マネージド アセンブリを含む COFF (Common Object File Format) ベースのイメージを使用して、アセンブリを読み込みます。Loads the assembly with a common object file format (COFF)-based image containing a managed assembly.

LoadFromStream(Stream, Stream)

マネージド アセンブリが含まれている COFF (Common Object File Format) ベースのイメージを使用して、このアセンブリを読み込みます。アセンブリのシンボルを含めることもできます。Loads the assembly with a common object file format (COFF)-based image containing a managed assembly, optionally including symbols for the assembly.

LoadUnmanagedDll(String)

名前を指定してアンマネージ ライブラリを読み込むことを派生クラスに許可します。Allows derived class to load an unmanaged library by name.

LoadUnmanagedDllFromPath(String)

指定したパスからアンマネージ ライブラリを読み込みます。Loads an unmanaged library from the specified path.

MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
SetProfileOptimizationRoot(String)

この読み込みコンテキストの最適化プロファイルが格納されるルート パスを設定します。Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String)

指定されたプロファイルのプロファイル最適化を開始します。Starts the profile optimization for the specified profile.

ToString()

この読み込みコンテキストの文字列形式を返します。Returns the string representation of this load context.

Unload()

この AssemblyLoadContext のアンロードを開始します。Initiates an unload of this AssemblyLoadContext.

イベント

Resolving

このアセンブリ読み込みコンテキストに読み込もうとしたときにアセンブリの解決に失敗したときに発生します。Occurs when the resolution of an assembly fails when attempting to load into this assembly load context.

ResolvingUnmanagedDll

ネイティブ ライブラリの解決が失敗したときに発生します。Occurs when the resolution of a native library fails.

Unloading

AssemblyLoadContext がアンロードされるときに発生します。Occurs when the AssemblyLoadContext is unloaded.

適用対象

こちらもご覧ください