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) method needs to be implemented to create a concrete class.

AssemblyLoadContext существует в основном для обеспечения изоляции загрузки сборок.The AssemblyLoadContext exists primarily to provide assembly loading 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 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 that 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 предоставляет две точки расширения для реализации разрешения управляемой сборки:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. Метод AssemblyLoadContext.Load(AssemblyName) предоставляет первый шанс AssemblyLoadContext разрешать, загружать и возвращать сборку.The AssemblyLoadContext.Load(AssemblyName) method provides the first chance for the AssemblyLoadContext to resolve, load, and return the assembly. Если метод AssemblyLoadContext.Load(AssemblyName) возвращает null, загрузчик пытается загрузить сборку в AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) method returns null, the loader tries 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. Для большинства сценариев достаточно политики поиска по умолчанию.The default search policy is sufficient for most scenarios.

Технические проблемыTechnical challenges

  • Невозможно загрузить несколько версий среды выполнения в одном процессе.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 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 that 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 is to use an interface defined in an assembly that's 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

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

CurrentContextualReflectionContext

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

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

EnterContextualReflection(Assembly)

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

Получает AssemblyLoadContext с указанным Assembly.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, содержащим управляемую сборку.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly.

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)

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

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

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