La forma "correcta" (MS recomendada) de hacer esto, cuando debe usar Type.GetType(string)
en tipos en ensamblados que no están en el contexto de carga sino en el contexto load-from o no-context, es enlazar a Appdomain.AssemblyResolve
evento. El código siguiente es relativamente eficiente:
// this resolver works as long as the assembly is already loaded
// with LoadFile/LoadFrom or Load(string)/Load(byte[])
private static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
var asm = (from a in AppDomain.CurrentDomain.GetAssemblies()
where a.GetName().FullName == args.Name
select a).FirstOrDefault();
if(asm == null)
throw FileNotFoundException(args.Name); // this becomes inner exc
return asm;
}
// place this somewhere in the beginning of your app:
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
Parece ligeramente más eficiente para crear una combinación de los eventos AssemblyLoad/Resolve para mantener un diccionario de los ensamblados cargados (utilizar el ensamblaje de nombre como tecla).
Ensamblaje.LoadFile
Hay un serio inconveniente al usar este método. According to MSDN:
LoadFile no carga archivos en el contexto LoadFrom, y no resuelve dependencias utilizando el camino de carga, como el método LoadFrom hace.
De ser posible, no use LoadFile. El ensamblaje resultante se carga en el contexto sin contexto, que tiene aún más inconvenientes que el contexto load-from. En su lugar, use Assembly.LoadFrom y las dependencias se cargarán automáticamente desde la ruta de carga.
¿Este ensamblaje está relacionado de alguna manera con el lenguaje ensamblador? –
@KirilKirov: No. Es un tipo en .Net. –
@Austin - ah, gracias :) Fui engañado por la etiqueta. –