Compartir a través de


MDA de loadFromContext

El asistente para la depuración administrada (MDA) de loadFromContext se activa si se carga un ensamblado en el contexto LoadFrom. Esta situación puede producirse como consecuencia de llamar a Assembly.LoadFrom o a otros métodos similares.

Síntomas

El uso de algunos métodos de cargador puede dar lugar a que se carguen ensamblados en el contexto LoadFrom. El uso de este contexto puede tener como consecuencia un comportamiento inesperado para la serialización, conversión y resolución de dependencia. En general, se recomienda que los ensamblados se carguen en el contexto Load para evitar estos problemas. Es difícil determinar en qué contexto se ha cargado un ensamblado sin este MDA.

Motivo

Por lo general, se ha cargado un ensamblado en el contexto LoadFrom si se cargó desde una ruta de acceso fuera del contexto Load, como la caché global de ensamblados o la propiedad AppDomainSetup.ApplicationBase.

Resolución

Configure las aplicaciones de manera que ya no se necesiten llamadas LoadFrom. Puede utilizar las técnicas siguientes para realizar esa operación:

  • Instale los ensamblados en la caché global de ensamblados.

  • Coloque los ensamblados en el directorio ApplicationBase para AppDomain. En el caso del dominio predeterminado, el directorio ApplicationBase es el que contiene el archivo ejecutable que inició el proceso. Esto también podría requerir la creación de un nuevo AppDomain si no resulta práctico mover el ensamblado.

  • Agregue una ruta de búsqueda al archivo de configuración de la aplicación (.config) o a dominios de aplicación secundarios si los ensamblados dependientes se encuentran en directorios secundarios con respecto al archivo ejecutable.

En cada caso, el código se puede cambiar para utilizar el método Assembly.Load.

Efecto en el tiempo de ejecución.

El MDA no tiene ningún efecto en el CLR. Informa del contexto que se utilizó como resultado de una solicitud de carga.

Output

El MDA informa de que el ensamblado se cargó en el contexto LoadFrom. Especifica el nombre sencillo del ensamblado y la ruta de acceso. También sugiere mitigaciones para evitar el uso del contexto LoadFrom.

Configuración

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

Ejemplo

En el siguiente ejemplo de código se muestra una situación en la que se 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");
        }
    }
}

Vea también

Conceptos

Diagnóstico de errores con ayudantes de depuraciones administradas