loadFromContext MDA
Nota
Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O loadFromContext
assistente de depuração gerenciado (MDA) é ativado se um assembly for carregado no LoadFrom
contexto. Esta situação pode ocorrer como resultado de chamada Assembly.LoadFrom ou outros métodos semelhantes.
Sintomas
O uso de alguns métodos de carregador pode resultar em montagens sendo carregadas no LoadFrom
contexto. O uso desse contexto pode resultar em um comportamento inesperado para serialização, transmissão e resolução de dependência. Em geral, recomenda-se que os assemblies sejam carregados no Load
contexto para evitar esses problemas. É difícil determinar em que contexto um assembly foi carregado sem esse MDA.
Motivo
Geralmente, um assembly era carregado no LoadFrom
contexto se fosse carregado de um caminho fora do Load
contexto, como o cache de assembly global ou a AppDomainSetup.ApplicationBase propriedade.
Resolução
Configure aplicativos para que LoadFrom as chamadas não sejam mais necessárias. Você pode usar as seguintes técnicas para fazer isso:
Instale assemblies no cache de assembly global.
Coloque assemblies no ApplicationBase diretório do AppDomain. No caso do domínio padrão, o ApplicationBase diretório é aquele que contém o arquivo executável que iniciou o processo. Isso também pode exigir a criação de um novo AppDomain se não for conveniente mover o assembly.
Adicione um caminho de sondagem ao arquivo de configuração do aplicativo (.config) ou a domínios de aplicativo secundários se assemblies dependentes estiverem em diretórios filho relativos ao executável.
Em cada caso, o código pode ser alterado para usar o Assembly.Load método.
Efeito no tempo de execução
O MDA não tem qualquer efeito sobre o CLR. Ele relata o contexto que foi usado como resultado de uma solicitação de carga.
Saída
O MDA informa que a montagem foi carregada no LoadFrom
contexto. Ele especifica o nome simples do assembly e o caminho. Também sugere mitigações para evitar o uso do LoadFrom
contexto.
Configuração
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
Exemplo
O exemplo de código a seguir demonstra uma situação que pode ativar esse MDA:
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// The following call caused the LoadFrom context to be used
// because the assembly is loaded using LoadFrom and the path is
// located outside of the Load context probing path.
Assembly.LoadFrom(@"C:\Text\Test.dll");
}
}
}