问题描述
这个问题的超级简化处理是一个 netcoreapp3.1 控制台应用程序。它假定您已将一些程序集复制到项目文件夹中并将其重命名为 assy.dll
。
using System.IO;
namespace unload
{
class Program
{
static void Main(string[] args)
{
File.copy("./assy.dll","./assy-copy.dll",true);
var alc = new ALC();
var assy = alc.LoadFromAssemblyPath(new FileInfo("./assy-copy.dll").FullName);
alc.Unloading += x =>
{
File.Delete("./assy-copy.dll");
};
}
}
}
我不以任何方式干预,ALC 由应用程序的自然退出卸载,触发 Unloading 事件。
删除失败并显示拒绝访问错误,但在应用程序完成退出文件后可以被删除。
我该怎么做才能帮助程序集解除锁定?我可以在没有锁的情况下打开内存流并从中加载程序集,但这很麻烦。这东西据称有效。也许我用错了。
此版本在到达 Thread.Sleep
上的断点之前失败
using System;
using System.IO;
using System.Threading;
namespace unload
{
class Program
{
static void Main(string[] args)
{
File.copy("./assy.dll",true);
var alc = new ALC();
var assy = alc.LoadFromAssemblyPath(new FileInfo("./assy-copy.dll").FullName);
alc.Unloading += x =>
{
File.Delete("./assy-copy.dll");
};
assy = null;
GC.Collect();
alc.Unload();
GC.Collect();
Thread.Sleep(1000);
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)