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