Comportamiento extraño al mezclar la carga de ensamblajes usando Assembly.LoadFrom y Assembly.Load

Comportamiento extraño al mezclar la carga de ensamblajes usando Assembly.LoadFrom y Assembly.Load

He encontrado un comportamiento extraño al cargar ensamblajes con Assembly.LoadFrom y luego con Assembly.Load.
Estoy cargando un ensamblaje usando Assembly.LoadFrom, donde el ensamblaje se encuentra en una carpeta que no es la carpeta de ejecución.

Más adelante en mi código de prueba cuando intento cargar una vez más este ensamblaje con Assembly.Load, la carga falla con un System.IO.FileNotFoundException ("No se pudo cargar el archivo o ensamblado ...") a pesar de que el ensamblaje ya está cargado . La carga falla tanto con el nombre seguro como con el nombre no seguro (la razón original para cargar una vez más este ensamblado es el uso de un BinaryFormatter).

Sin embargo, en caso de que el ensamblaje se encuentre en la carpeta de ejecución, la carga posterior se realiza correctamente en ambos casos, con el nombre seguro y el nombre no seguro. En este caso, puede ver que dos ensamblajes idénticos se cargan desde dos ubicaciones diferentes.

Una muestra de código simple que recrea este problema:

Assembly assembly1 = Assembly.LoadFrom (@ "C: \ a.dll");

// La carga con un nombre seguro falla. Assembly assembly2 = Assembly.Load (@ "a, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 14986c3f172d1c2c");

// También se carga con un error no fuerte. Assembly assembly3 = Assembly.Load (@ "a");

¿Alguna explicación de por qué el CLR ignora el ensamblaje ya cargado?¿Alguna idea de cómo puedo aliviar este problema?

Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta