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. Она позволяет несколько версий одной сборки для загрузки в одном процессе.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

Среда выполнения реализует двух контекстов загрузки сборки: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 Предоставляет две точки расширения для реализации разрешение управляемой сборки: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 возвращает вторую попытку разрешить сборку.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

  • Это не позволяет загружать несколько версий среды выполнения в одном процессе.It is not possible to load multiple versions of the runtime in a single process.

    Внимание!

    Загрузка нескольких копий или разные версии сборки .NET 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 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

Возвращает коллекцию экземпляров Assembly, загруженных в AssemblyLoadContext.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext

Получает AssemblyLoadContext, заданный последним вызовов к EnterContextualReflection().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()

Задает для CurrentContextualReflectionContext значение thisAssemblyLoadContext.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

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

Задает для CurrentContextualReflectionContext значение AssemblyLoadContext, которое загрузило сборку.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)
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)

Получает AssemblyLoadContext с указанным Assembly.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, содержащим управляемую сборку.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, содержащим управляемую сборку и (дополнительно) символы для сборки.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.

Применяется к

Дополнительно