Compartilhar via


MDA loadFromContext

Observação

Este artigo é específico para aplicativos .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

O MDA (Assistente de Depuração Gerenciado) de loadFromContext é ativado se um assembly é carregado no contexto LoadFrom. Essa situação pode ocorrer como resultado da chamar Assembly.LoadFrom ou outros métodos semelhantes.

Sintomas

O uso de alguns métodos de carregador pode resultar em assemblies que estão sendo carregados no contexto LoadFrom. O uso desse contexto pode resultar em comportamento inesperado para serialização, conversão e resolução de dependência. Em geral, é recomendável que os assemblies sejam carregados no contexto Load para evitar esses problemas. É difícil determinar qual contexto de um assembly foi carregado sem esse MDA.

Causa

Em geral, um assembly foi carregado para o contexto de LoadFrom se ele foi carregado de um caminho fora do contexto Load, tal como o cache de assembly global ou a propriedade AppDomainSetup.ApplicationBase.

Resolução

Configure os aplicativos de modo que as chamadas LoadFrom não sejam mais necessárias. Você pode usar as seguintes técnicas para fazer isso:

  • Instale assemblies no cache de assembly global.

  • Coloque os assemblies no diretório ApplicationBase para o AppDomain. No caso do domínio padrão, o diretório ApplicationBase é aquele que contém o arquivo executável que iniciou o processo. Isso também poderá exigir a criação de um novo AppDomain, se não for conveniente mover o assembly.

  • Adicione um caminho de sondagem para o arquivo de configuração (.config) do aplicativo ou para domínios de aplicativo secundários se os assemblies dependentes estiverem em diretórios filho relacionados ao executável.

Em cada caso, o código pode ser alterado para usar o método Assembly.Load.

Efeito sobre o runtime

O MDA não tem nenhum efeito no CLR. Informa o contexto que foi usado como resultado de uma solicitação de carregamento.

Saída

O MDA informa que o assembly foi carregado para o contexto LoadFrom. Especifica o nome simples do assembly e o caminho. Também sugere atenuantes para evitar o uso do contexto LoadFrom.

Configuração

<mdaConfig>
  <assistants>
    <loadFromContext />
  </assistants>
</mdaConfig>

Exemplo

O seguinte exemplo de código 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");
        }
    }
}

Confira também