MDA de loadFromContext
Nota:
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.
El asistente para la depuración administrada (MDA) loadFromContext
se activa si se carga un ensamblado en el contexto de LoadFrom
. Esta situación puede producirse como resultado de llamar a Assembly.LoadFrom u otros métodos similares.
Síntomas
El uso de algunos métodos de cargador puede dar lugar a ensamblados que se carguen en el contexto de LoadFrom
. El uso de este contexto puede provocar un comportamiento inesperado para la serialización, conversión y resolución de dependencias. Por lo general, se recomienda que los ensamblados se carguen en el contexto de Load
para evitar estos problemas. Sin este MDA es difícil determinar en qué contexto se ha cargado un ensamblado.
Causa
Por lo general, un ensamblado se carga en el contexto de LoadFrom
si se cargó desde una ruta de acceso fuera del contexto de Load
, como la caché global de ensamblados o la propiedad AppDomainSetup.ApplicationBase.
Solución
Configure las aplicaciones para que las llamadas a LoadFrom ya no sean necesarias. Puede usar las técnicas siguientes para hacerlo:
Instalar ensamblados en la caché global de ensamblados.
Coloque los ensamblados en el directorio ApplicationBase del AppDomain. En el caso del dominio predeterminado, el directorio ApplicationBase es el que contiene el archivo ejecutable que inició el proceso. Es posible que esto también requiera crear un AppDomain si no es conveniente mover el ensamblado.
Agregue una ruta de acceso de sondeo al archivo de configuración (.config) de la aplicación o a dominios de aplicación secundarios si los ensamblados dependientes se encuentran en directorios secundarios en relación con el archivo ejecutable.
En cada caso, se puede cambiar el código para usar el método Assembly.Load.
Efecto en el Runtime
El MDA no tiene ningún efecto en el CLR. Informa del contexto que se usó como resultado de una solicitud de carga.
Output
El MDA informa de que el ensamblado se cargó en el contexto de LoadFrom
. Especifica el nombre simple del ensamblado y la ruta de acceso. También sugiere mitigaciones para evitar el uso del contexto de LoadFrom
.
Configuración
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
Ejemplo
En el ejemplo de código siguiente se muestra una situación que puede activar 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");
}
}
}