Tengo un dominio de aplicación hijo donde quiero cargar algunas bibliotecas dll al iniciar y liberar archivos para que cualquiera pueda eliminarlas.Cargar el ensamblado en AppDomain hijo y liberar el archivo dll
En la puesta en marcha hago
Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)
para la siguiente clase.
class Loader : MarshalByRefObject
{
internal void Load(string path)
{
Assembly assembly;
try
{
assembly = Assembly.Load(File.ReadAllBytes(path));
}
catch (Exception) { return; }
}
internal UseType(string fullyQualifiedTypeName)
{
Type userType = Type.GetType(fullyQualifiedTypeName);
}
}
Más tarde me invocan UseType
y consigo el tipo correcto pero no soy capaz de eliminar el archivo más, porque es como si la aplicación de dominio de niño ha bloqueado el archivo DLL.
Básicamente lo que quiero lograr es almacenar en caché el archivo de ensamblaje en el arranque y luego usar las llamadas GetType
para que se libere el archivo dll real.
¿Es realmente posible lograr algo como esto?
CreateInstanceAndUnwrap() también carga el tipo en el dominio primario de la aplicación. Que bloquea el archivo. Use un tipo de interfaz, definido en un ensamble separado. –
Está bien que tenga el archivo que contiene Loader bloqueado. ¿O cualquier tipo utilizado en los métodos de Loader hará que su ensamblaje se cargue en el dominio principal de la aplicación? – Egor
Vea también: http://stackoverflow.com/questions/6480140/appdomain-shadow-copying-not-working-original-assemblies-locked – cdiggins