Partilhar via


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");
        }
    }
}

Consulte também