是什么导致保留对 assy 文件的锁定?

问题描述

这个问题的超级简化处理是一个 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 (将#修改为@)