AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext Class

定義

バインディングに関するランタイムのスコープの概念を表します。Represents the runtime's concept of a scope for binding. このクラスは抽象クラスです。This class is abstract.

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

注釈

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 binding 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 binding 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 binding scenarios. カスタマイズでは、依存関係の解決メカニズムの定義に焦点を当てます。The customization focuses on defining dependency resolution mechanisms.

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

  1. は、がAssemblyLoadContextアセンブリを解決するための最初の機会を提供し、それを読み込んで返します。AssemblyLoadContext.Load(AssemblyName)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のはアセンブリを解決する機会をもう1つ取得します。 AssemblyLoadContext.DefaultIf 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 binding isolation process creates multiple types with the same type name.

    • これにより、"型 Foo. foo は型 foo. foo にキャストできません" など、エラーメッセージが混乱する可能性があります。This can lead to confusing error messages, for example "type Foo.Foo cannot be cast to type Foo.Foo."
    • 分離の境界を越えたマーシャリングは、簡単ではありません。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() AssemblyLoadContext() AssemblyLoadContext()

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

AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean)

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

AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) 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 All All All

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

Assemblies Assemblies Assemblies Assemblies

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

CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext

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

Default Default Default Default

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

IsCollectible IsCollectible IsCollectible IsCollectible

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

Name Name Name Name

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

メソッド

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()

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

EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)

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

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

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

GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String)

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly)

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

GetType() GetType() GetType() GetType()

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

(Inherited from Object)
Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

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

LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName)

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

LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String)

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

LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String)

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

LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream) 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) LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream) 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) LoadUnmanagedDll(String) LoadUnmanagedDll(String) LoadUnmanagedDll(String)

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

LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String)

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

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String)

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

StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)

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

ToString() ToString() ToString() ToString()

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

Unload() Unload() Unload() Unload()

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

イベント

Resolving Resolving Resolving Resolving

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

ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll

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

Unloading Unloading Unloading Unloading

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

適用対象

こちらもご覧ください