在运行时的Web应用程序中,我加载一个外部程序集(* .dll文件)并运行它的一部分代码,然后我想卸载并删除该文件!
这是我的加载代码:
var assembly = Assembly.Load(AssemblyName.GetAssemblyName(@"..\..\anexternallibrary.dll"));
如何卸载并释放文件?删除文件也无法完成抛出文件访问被拒绝的异常。
如何在不中断相关流程的情况下强制删除它?
答案 0 :(得分:0)
将程序集加载到AppDomain
后,无法卸载它,您必须卸载整个AppDomain
。
您可以创建新的AppDomain
,但是他们无法直接相互交谈,而无需在两者之间进行编组。
但就文件而言,您可以使用Assembly.Load(byte[]),例如:
byte[] assembly_bytes;
using (var file = new FileStream(
@"..\..\anexternallibrary.dll",
FileMode.Open,
FileAccess.Read,
FileShare.None))
{
assembly_bytes = new byte[file.Length];
file.Read(assembly_bytes,0,assembly_bytes.Length);
}
Assembly assembly = Assembly.Load(assembly_bytes);
然后您可以自由删除源文件。但是,卸载问题仍然适用。