AssemblyLoadContext Classe

Definição

Representa o conceito de runtime de um escopo para carregamento de assembly.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
Herança
AssemblyLoadContext

Comentários

O AssemblyLoadContext representa um contexto de carga.The AssemblyLoadContext represents a load context. Conceitualmente, um contexto de carga cria um escopo para carregar, resolver e possivelmente descarregar um conjunto de assemblies.Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext é uma classe abstrata.AssemblyLoadContext is an abstract class. O AssemblyLoadContext.Load(AssemblyName) precisa ser implementado para criar uma classe concreta.The AssemblyLoadContext.Load(AssemblyName) needs to be implemented to create a concrete class.

O AssemblyLoadContext existe principalmente para fornecer isolamento de carregamento de assembly.The AssemblyLoadContext exists primarily to provide assembly loading isolation. Ele permite que várias versões do mesmo assembly sejam carregadas em um único processo.It allows multiple versions of the same assembly to be loaded within a single process. Ele substitui os mecanismos de isolamento fornecidos por várias instâncias AppDomain no .NET Framework.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Observação

o AssemblyLoadContext não fornece nenhum recurso de segurança.AssemblyLoadContext does not provide any security features. Todo o código tem permissões totais do processo.All code has full permissions of the process.

Uso no tempo de execuçãoUsage in the runtime

O tempo de execução implementa dois contextos de carga de assembly:The runtime implements two assembly load contexts:

Uso do aplicativoApplication usage

Um aplicativo pode criar seu próprio AssemblyLoadContext para criar uma solução personalizada para cenários avançados.An application can create its own AssemblyLoadContext to create a custom solution for advanced scenarios. A personalização concentra-se na definição de mecanismos de resolução de dependência.The customization focuses on defining dependency resolution mechanisms.

O AssemblyLoadContext fornece dois pontos de extensão para implementar a resolução de assembly gerenciada:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. O AssemblyLoadContext.Load(AssemblyName) fornece a primeira chance para o AssemblyLoadContext resolver o assembly, carregá-lo e retorná-lo.The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. Se o AssemblyLoadContext.Load(AssemblyName) retornar null, o carregador tentará carregar o assembly no AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Se o AssemblyLoadContext.Default não puder resolver o assembly, o AssemblyLoadContext original obterá uma segunda chance de resolver o assembly.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. O tempo de execução gera o evento Resolving.The runtime raises the Resolving event.

Além disso, o método virtual AssemblyLoadContext.LoadUnmanagedDll(String) permite a personalização da resolução de assembly não gerenciada padrão.Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. A implementação padrão retorna null, o que faz com que a pesquisa de tempo de execução Use sua política de pesquisa padrão, o que é suficiente para a maioria dos cenários.The default implementation returns null, which causes the runtime search to use its default search policy which is sufficient for most scenarios.

Desafios técnicosTechnical challenges

  • Não é possível carregar várias versões do tempo de execução em um único processo.It is not possible to load multiple versions of the runtime in a single process.

    Cuidado

    Carregar várias cópias ou versões diferentes de assemblies do Framework pode levar a um comportamento inesperado e difícil de diagnosticar.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard to diagnose behavior.

    Dica

    Use limites de processo com comunicação remota e/ou entre processos para resolver esse problema de isolamento.Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • O tempo de carregamento do assembly pode dificultar o teste e a depuração.The timing of assembly loading can make testing and debugging difficult. Normalmente, os assemblies são carregados sem que suas dependências sejam resolvidas imediatamente.Assemblies are typically loaded without their dependencies immediately being resolved. As dependências são carregadas conforme necessário:The dependencies are loaded as they are needed:

    • Quando o código é ramificado em um assembly dependente.When code branches into a dependent assembly.
    • Quando o código carrega recursos.When code loads resources.
    • Quando o código carrega assemblies explicitamente.When code explicitly loads assemblies.
  • A implementação de AssemblyLoadContext.Load(AssemblyName) pode adicionar novas dependências que talvez precisem ser isoladas para permitir que versões diferentes existam.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. A implementação mais natural colocaria essas dependências no contexto padrão.The most natural implementation would place these dependencies in the default context. O design cuidadoso pode isolar as novas dependências.Careful design can isolate the new dependencies.

  • O mesmo assembly é carregado várias vezes em contextos diferentes.The same assembly is loaded multiple times into different contexts.

    • Isso pode levar a mensagens de erro confusas, por exemplo "não é possível converter o objeto do tipo" Sample. plugin ' no tipo "Sample. plugin '".This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'."
    • O marshaling entre limites de isolamento é não trivial.Marshaling across isolation boundaries is non-trivial. Uma solução típica seria usar uma interface definida em um assembly que só é carregada no contexto de carga padrão.A typical solution would be to use an interface defined in an assembly which is only loaded into the default load context.

Construtores

AssemblyLoadContext()

Inicializa uma nova instância da classe AssemblyLoadContext.Initializes a new instance of the AssemblyLoadContext class.

AssemblyLoadContext(Boolean)

Inicializa uma nova instância da classe AssemblyLoadContext com um valor que indica se o descarregamento está habilitado.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

AssemblyLoadContext(String, Boolean)

Inicializa uma nova instância da classe AssemblyLoadContext com um nome e um valor que indicam se o descarregamento está habilitado.Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

Propriedades

All

Retorna uma coleção de todas as instâncias AssemblyLoadContext.Returns a collection of all AssemblyLoadContext instances.

Assemblies

Retorna uma coleção das instâncias Assembly carregadas no AssemblyLoadContext.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext

Obtém o AssemblyLoadContext definido pela chamada mais recente para EnterContextualReflection().Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

Default

Obtém o AssemblyLoadContext padrão.Gets the default AssemblyLoadContext. O contexto padrão contém o assembly principal do aplicativo e suas dependências estáticas.The default context contains the main application assembly and its static dependencies.

IsCollectible

Obtém um valor que indica se este AssemblyLoadContext é uma coleção.Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name

Obtenha o nome de AssemblyLoadContext.Get the name of the AssemblyLoadContext.

Métodos

EnterContextualReflection()

Define CurrentContextualReflectionContext para thisAssemblyLoadContext.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Define CurrentContextualReflectionContext como o AssemblyLoadContext que carregou o assembly.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
Finalize()

Permite que o objeto tente liberar recursos e executar outras operações de limpeza antes de ser recuperado pela coleta de lixo.Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

GetAssemblyName(String)

Obtém um AssemblyName para um caminho de assembly.Gets an AssemblyName for an assembly path.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetLoadContext(Assembly)

Obtém o AssemblyLoadContext que contém o Assembly especificado.Gets the AssemblyLoadContext containing the specified Assembly.

GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
Load(AssemblyName)

Quando substituído em uma classe derivada, permite que um assembly seja resolvido e carregado com base em seu AssemblyName.When overridden in a derived class, allows an assembly to be resolved and loaded based on its AssemblyName.

LoadFromAssemblyName(AssemblyName)

Resolve e carrega um assembly dado seu AssemblyName.Resolves and loads an assembly given its AssemblyName.

LoadFromAssemblyPath(String)

Carrega o conteúdo de um arquivo do assembly no caminho especificado.Loads the contents of an assembly file on the specified path.

LoadFromNativeImagePath(String, String)

Carrega o conteúdo da imagem nativa de um arquivo do assembly gerenciado no caminho especificado.Loads the contents of the native image of a managed assembly file on the specified path.

LoadFromStream(Stream)

Carrega o assembly com uma imagem baseada no formato COFF que contém um assembly gerenciado.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly.

LoadFromStream(Stream, Stream)

Carrega o assembly com uma imagem baseada no formato COFF, contendo um assembly gerenciado e com a opção de incluir símbolos para o assembly.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly, optionally including symbols for the assembly.

LoadUnmanagedDll(String)

Permite que uma classe derivada carregue uma biblioteca não gerenciada por nome.Allows derived class to load an unmanaged library by name.

LoadUnmanagedDllFromPath(String)

Carrega uma biblioteca não gerenciada por meio do caminho especificado.Loads an unmanaged library from the specified path.

MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
SetProfileOptimizationRoot(String)

Define o caminho raiz em que os perfis de otimização desse contexto de carga são armazenados.Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String)

Inicia a otimização do perfil especificado.Starts the profile optimization for the specified profile.

ToString()

Retorna a representação de cadeia de caracteres desse contexto de carga.Returns the string representation of this load context.

Unload()

Inicia um descarregamento deste AssemblyLoadContext.Initiates an unload of this AssemblyLoadContext.

Eventos

Resolving

Ocorre quando a resolução de um assembly falha durante a tentativa de carregamento nesse contexto de carregamento de assembly.Occurs when the resolution of an assembly fails when attempting to load into this assembly load context.

ResolvingUnmanagedDll

Ocorre quando a resolução de uma biblioteca nativa falha.Occurs when the resolution of a native library fails.

Unloading

Ocorre quando o AssemblyLoadContext é descarregado.Occurs when the AssemblyLoadContext is unloaded.

Aplica-se a

Veja também