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

C# 如何在c中强制删除拒绝访问的文件#,c#,asp.net,appdomain,C#,Asp.net,Appdomain,在运行时的web应用程序中,我加载一个外部程序集(*.dll文件)并运行它的部分代码,然后我想卸载并删除该文件 这是我的加载代码: var assembly = Assembly.Load(AssemblyName.GetAssemblyName(@"..\..\anexternallibrary.dll")); 如何卸载它并释放文件?删除文件也无法完成,引发文件访问被拒绝异常 如何在不终止相关进程的情况下强制删除它?一旦将程序集加载到AppDomain中,就无法卸载它,而必须卸载整个AppD

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

这是我的加载代码:

var assembly = Assembly.Load(AssemblyName.GetAssemblyName(@"..\..\anexternallibrary.dll"));
如何卸载它并释放文件?删除文件也无法完成,引发文件访问被拒绝异常


如何在不终止相关进程的情况下强制删除它?

一旦将程序集加载到
AppDomain
中,就无法卸载它,而必须卸载整个
AppDomain

您可以创建新的
AppDomain
,但是如果不在两者之间进行编组,它们就不能直接相互通信

但就文件而言,您可以使用,例如:

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);
然后,您可以自由删除源文件。然而,卸载问题仍然适用