tengo un problema extraño. me gustaría eliminar un ensamblado (plugin.dll en el disco duro) que ya está cargado, pero el ensamblado está bloqueado por el sistema operativo (vista), incluso si lo he descargado.cómo eliminar el pluginassembly después de AppDomain.Unload (dominio)
f.e.
AppDomainSetup setup = new AppDomainSetup();
setup.ShadowCopyFiles = "true";
AppDomain appDomain = AppDomain.CreateDomain(assemblyName + "_AppDomain", AppDomain.CurrentDomain.Evidence, setup);
IPlugin plugin = (IPlugin)appDomain.CreateInstanceFromAndUnwrap(assemblyName, "Plugin.MyPlugins");
también necesito los assemblyinfos, porque no sé qué clases en el pluginassembly implementa la interfaz IPlugin. Debería ser posible tener más de un Complemento en un PlugInsamblador.
Assembly assembly = appDomain.Load(assemblyName);
if (assembly != null) {
Type[] assemblyTypes = assembly.GetTypes();
foreach (Type assemblyTyp in assemblyTypes) {
if (typeof(IPlugin).IsAssignableFrom(assemblyTyp)) {
IPlugin plugin = (IPlugin)Activator.CreateInstance(assemblyTyp);
plugin.AssemblyName = assemblyNameWithEx;
plugin.Host = this;
}
}
}
AppDomain.Unload(appDomain);
¿Cómo es posible obtener el assemblyinfos del dominio de la aplicación sin bloquear el conjunto?
mejores deseos
Funcionó bien cuando lo probé, pero el suyo es más corto de todos modos;) –
Hay un montón de preguntas similares sobre la descarga de archivos DLL y el uso de AppDomains por separado, pero no parecen funcionar cuando realmente desea * eliminar * la DLL. Esto definitivamente hace el truco sin importar :) – Jedidja
¡Agradable! Ni siquiera necesita otro dominio de aplicación. –