Compartilhar via


loadFromContext MDA

Observação

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

O loadFromContext MDA (assistente de depuração gerenciada) será ativado se um assembly for carregado no LoadFrom contexto. Essa situação pode ocorrer como resultado de chamadas Assembly.LoadFrom ou outros métodos semelhantes.

Symptoms

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

Motivo

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

Resolução

Configure aplicativos de modo 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 para o 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 investigação ao arquivo de configuração do aplicativo (.config) ou a domínios de aplicativo secundários se os assemblies dependentes estiverem em diretórios filho em relação ao executável.

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

Efeito no Runtime

O MDA não tem nenhum 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 o assembly foi carregado no LoadFrom contexto. Ele especifica o nome simples do assembly e do 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 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