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. 複数によって提供される分離メカニズムに置き換えられますAppDomain.NET Framework 内のインスタンス。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.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アセンブリを解決する 2 番目のチャンスを取得します。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.

    注意事項

    複数のコピーまたは異なるバージョンの framework アセンブリの読み込み中は、予期しないと問題の診断が困難につながります。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 garbage collection is enabled.

AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean)

プロパティ

All All All All
Assemblies Assemblies Assemblies Assemblies
CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext
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

メソッド

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()
EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
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)
StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)
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
Unloading Unloading Unloading Unloading

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

適用対象

こちらもご覧ください