Partilhar via


loadFromContext MDA

Observação

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 gerido (MDA) é ativado se um assembly for carregado no LoadFrom contexto. Esta situação pode ocorrer como resultado de chamadas Assembly.LoadFrom ou outros métodos semelhantes.

Sintomas

A utilização de alguns métodos de carregador pode resultar no carregamento de assemblies no LoadFrom contexto. A utilização deste contexto pode resultar em comportamentos inesperados para serialização, casting e resolução de dependências. Em geral, recomenda-se que os assemblies sejam carregados no Load contexto para evitar estes problemas. É difícil determinar em que contexto um assembly foi carregado sem este MDA.

Motivo

Geralmente, uma assembly era carregada no LoadFrom contexto se fosse carregada a partir de um caminho fora do Load contexto, como a cache global de assembly ou a AppDomainSetup.ApplicationBase propriedade.

Resolução

Configure as aplicações de modo a que LoadFrom as chamadas deixem de ser necessárias. Pode usar as seguintes técnicas para o fazer:

  • Instale assemblies na cache global assembly.

  • Coloque assemblies no ApplicationBase diretório para o AppDomain. No caso do domínio predefinido, o ApplicationBase diretório é aquele que contém o ficheiro executável que iniciou o processo. Isto também pode exigir a criação de um novo AppDomain , caso não seja conveniente mover o conjunto.

  • Adicione um caminho de sondagem ao ficheiro de configuração da sua aplicação (.config) ou a domínios de aplicação secundários se os assemblies dependentes estiverem em diretórios filhos relativamente 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

A MDA não tem qualquer efeito sobre o CLR. Reporta o contexto utilizado como resultado de um pedido de carregamento.

Output

A MDA relata que a montagem foi inserida no LoadFrom contexto. Especifica o nome simples da assembleia e do caminho. Também sugere mitigações para evitar o uso do LoadFrom contexto.

Configuração

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

Exemplo

O seguinte exemplo de código demonstra uma situação que pode ativar este 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