AssemblyLoadContext Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Representa o conceito do tempo de execução de um âmbito para carregamento de montagem.
public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
- Herança
-
AssemblyLoadContext
Observações
O AssemblyLoadContext representa um contexto de carga. Conceitualmente, um contexto de carga cria um escopo para carregar, resolver e potencialmente descarregar um conjunto de assemblies.
O AssemblyLoadContext existe principalmente para fornecer isolamento de carregamento de assemblies. Ele permite que várias versões do mesmo assembly sejam carregadas dentro de um único processo. Ele substitui os mecanismos de isolamento fornecidos por várias AppDomain instâncias no .NET Framework.
Note
- AssemblyLoadContext não fornece quaisquer elementos de segurança. Todo o código tem permissões totais do processo.
- Somente no .NET Core 2.0 - 2.2, AssemblyLoadContext é uma classe abstrata. Para criar uma classe concreta nessas versões, implemente o AssemblyLoadContext.Load(AssemblyName) método.
Utilização no tempo de execução
O tempo de execução implementa dois contextos de carga de assembly:
- AssemblyLoadContext.Default representa o contexto predefinido do runtime, utilizado para o assembly principal da aplicação e suas dependências estáticas.
- O método Assembly.LoadFile(String) isola as assemblies que carrega ao instanciar o mais básico AssemblyLoadContext. Ele tem um esquema de isolamento simplista que carrega cada assembly em seu próprio AssemblyLoadContext sem resolução de dependência.
Uso do aplicativo
Um aplicativo pode criar seu próprio AssemblyLoadContext para criar uma solução personalizada para cenários avançados. A personalização centra-se na definição de mecanismos de resolução de dependências.
O AssemblyLoadContext fornece dois pontos de extensão para implementar a resolução de assemblagem gerida:
- O método AssemblyLoadContext.Load(AssemblyName) oferece ao AssemblyLoadContext a primeira oportunidade para resolver, carregar e devolver o assembly. Se o AssemblyLoadContext.Load(AssemblyName) método retornar
null, o carregador tentará carregar o conjunto no AssemblyLoadContext.Default. - Se o AssemblyLoadContext.Default não conseguir resolver a montagem, o original AssemblyLoadContext terá uma segunda chance de resolver a montagem. O tempo de execução gera o Resolving evento.
Além disso, o método virtual AssemblyLoadContext.LoadUnmanagedDll(String) permite a personalização da resolução padrão de assembly não gerenciado. A implementação padrão retorna null, o que faz com que a pesquisa em tempo de execução use sua política de pesquisa padrão. A política de pesquisa padrão é suficiente para a maioria dos cenários.
Desafios técnicos
Não é possível carregar várias versões do tempo de execução em um único processo.
Atenção
Carregar várias cópias ou versões diferentes de assemblies de estrutura pode levar a um comportamento inesperado e difícil de diagnosticar.
Tip
Use limites de processo com comunicação remota ou entre processos para resolver esse problema de isolamento.
O tempo de carregamento da montagem pode dificultar o teste e a depuração. Normalmente, as assemblagens são carregadas sem que as suas dependências sejam resolvidas imediatamente. As dependências são carregadas conforme necessário:
- Quando o código se ramifica em uma assemblagem dependente.
- Quando o código carrega recursos.
- Quando o código carrega explicitamente assemblagens.
A implementação de AssemblyLoadContext.Load(AssemblyName) pode adicionar novas dependências que podem precisar ser isoladas para permitir que diferentes versões existam. A implementação mais natural colocaria essas dependências no contexto padrão. Um design cuidadoso pode isolar as novas dependências.
O mesmo módulo é carregado várias vezes em contextos diferentes.
- Isso pode levar a mensagens de erro confusas, por exemplo, "Não é possível converter objeto do tipo 'Sample.Plugin' para o tipo 'Sample.Plugin'".
- O marshaling de dados através dos limites de isolamento não é uma tarefa simples. Uma solução típica é usar uma interface definida numa assembly que só é carregada no contexto de carregamento padrão.
Construtores
| Name | Descrição |
|---|---|
| AssemblyLoadContext() |
Inicializa uma nova instância da AssemblyLoadContext classe. |
| AssemblyLoadContext(Boolean) |
Inicializa uma nova instância da AssemblyLoadContext classe com um valor que indica se o descarregamento está ativado. |
| AssemblyLoadContext(String, Boolean) |
Inicializa uma nova instância da AssemblyLoadContext classe com um nome e um valor que indicam se o descarregamento está ativado. |
Propriedades
| Name | Descrição |
|---|---|
| All |
Devolve uma coleção de todas AssemblyLoadContext as instâncias. |
| Assemblies |
Devolve uma coleção das Assembly instâncias carregadas no AssemblyLoadContext. |
| CurrentContextualReflectionContext |
Obtém o AssemblyLoadContext conjunto pela chamada mais recente para EnterContextualReflection(). |
| Default |
Obtém o padrão AssemblyLoadContext. O contexto padrão contém o assembly principal da aplicação e as suas dependências estáticas. |
| IsCollectible |
Recebe um valor que indica se isto AssemblyLoadContext é colecionável. |
| Name |
Obtenha o nome do AssemblyLoadContext. |
Métodos
| Name | Descrição |
|---|---|
| EnterContextualReflection() |
Define CurrentContextualReflectionContext para |
| EnterContextualReflection(Assembly) |
Define CurrentContextualReflectionContext para o AssemblyLoadContext que carregou a montagem. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| Finalize() |
Permite que o objeto tente libertar recursos e realizar outras operações de limpeza antes de ser recuperado pela recolha de lixo. |
| GetAssemblyName(String) |
Recebe um AssemblyName caminho de montagem. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetLoadContext(Assembly) |
Obtém o AssemblyLoadContext que contém o especificado Assembly. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| Load(AssemblyName) |
Quando sobrescrito numa classe derivada, permite que um assembly seja resolvido com base no seu AssemblyName. |
| LoadFromAssemblyName(AssemblyName) |
Resolve e carrega um assembly dado o seu AssemblyName. |
| LoadFromAssemblyPath(String) |
Carrega o conteúdo de um ficheiro assembly no caminho especificado. |
| LoadFromNativeImagePath(String, String) |
Carrega o conteúdo da imagem nativa de um ficheiro assembly gerido no caminho especificado. |
| LoadFromStream(Stream, Stream) |
Carrega o assembly com uma imagem baseada em formato common object file (COFF) contendo um assembly gerido, opcionalmente incluindo símbolos para o assembly. |
| LoadFromStream(Stream) |
Carrega o assembly com uma imagem baseada em formato de ficheiro de objeto comum (COFF) contendo um assembly gerido. |
| LoadUnmanagedDll(String) |
Permite que uma classe derivada carregue uma biblioteca não gerida pelo nome. |
| LoadUnmanagedDllFromPath(String) |
Carrega uma biblioteca não gerida a partir do caminho especificado. |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| SetProfileOptimizationRoot(String) |
Define o caminho raiz onde os perfis de otimização para este contexto de carga são armazenados. |
| StartProfileOptimization(String) |
Inicia a otimização do perfil para o perfil especificado. |
| ToString() |
Devolve a representação da cadeia deste contexto de carga. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
| Unload() |
Inicia uma descarga disto AssemblyLoadContext. |
Eventos
| Name | Descrição |
|---|---|
| Resolving |
Ocorre quando a resolução de um conjunto falha ao tentar carregar neste contexto de carga de montagem. |
| ResolvingUnmanagedDll |
Ocorre quando a resolução de uma biblioteca nativa falha. |
| Unloading |
Ocorre quando o AssemblyLoadContext está descarregado. |