如何强制删除c#中的访问被拒绝文件

时间:2015-06-25 10:10:23

标签: c# asp.net appdomain

在运行时的Web应用程序中,我加载一个外部程序集(* .dll文件)并运行它的一部分代码,然后我想卸载并删除该文件!

这是我的加载代码:

var assembly = Assembly.Load(AssemblyName.GetAssemblyName(@"..\..\anexternallibrary.dll"));

如何卸载并释放文件?删除文件也无法完成抛出文件访问被拒绝的异常。

如何在不中断相关流程的情况下强制删除它?

1 个答案:

答案 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);

然后您可以自由删除源文件。但是,卸载问题仍然适用。