Así que aquí está la situación:Cambio de nombre de archivo de ensamblado y Assembly.LoadFile
Tengo un ensamblado llamado Lib1.dll. Por alguna razón (no relevante para la pregunta) tuve que cambiar el nombre del archivo de ensamblado a Lib1New.dll, ahora al intentar cargar el ensamblado renombrado usando Assembly.LoadFile noté que el CLR también intenta cargar el Lib1.dll.
Si Lib1.dll se encuentra en la ruta de búsqueda, se carga en el espacio de direcciones. La aplicación funciona bien independientemente de si se encontró Lib1.dll o no. (El problema es que si se encuentra Lib1.dll, el archivo se bloquea y no puede ser eliminado por otros procesos).
No entiendo por qué las búsquedas loadFile y cargas Lib1.dll. Se supone que LoadFile carga el contenido de un archivo de ensamblaje en la ubicación especificada, por qué está buscando archivos.
documentación de MSDN para LoadFile:
Utilice el método LoadFile para cargar y examinar las asambleas que tienen la misma identidad, pero se encuentran en diferentes caminos. LoadFile no carga archivos en el contexto LoadFrom y no resuelve dependencias utilizando la ruta de carga, como lo hace el método LoadFrom. LoadFile es útil en este escenario limitado porque LoadFrom no se puede usar para cargar ensamblajes que tienen las mismas identidades pero rutas diferentes; cargará solo el primer ensamblaje.
Gracias BlueMonkMN, esto tiene algo de sentido. Si la Biblioteca se está cargando a sí misma dinámicamente, es posible cargar la biblioteca original, pero el registro del monitor de proceso que adjunté con la publicación se produjo usando la siguiente Lib1 usando el Sistema; espacio de nombres Lib1 { public class Class1 { public void SayHello() { Console.WriteLine ("Class1 :: SayHello"); } } } Puede ejecutar el monitor de procesos y comprobar si la aplicación de consola está intentando cargar los dlls o no. –
Parece que no lo estaba encontrando porque tenía el archivo DLL en un directorio que no era el de la aplicación. – BlueMonkMN