我使用 Assembly.LoadFrom 来加载自定义 dll,但其中一个 dll 保留在我的项目解决方案中,并随应用程序一起提供。
问题是,几乎每隔一次我尝试构建项目时,我都会收到一条错误消息,说它无法将新编译的 dll 复制到旧的 dll 上,因为它正被另一个进程使用。
处理这个问题的最佳方法是什么?想到的两个想法是:
- 在加载之前将文件复制到另一个位置
- 只需自己将文件加载到内存中,这样我就可以手动关闭文件,然后从内存中的副本加载程序集。
这两种解决方案都相当容易实现,但如果有一种不需要我更改代码的快速/简单的方法,我会更喜欢它。
编辑:我不需要在运行时卸载程序集。当程序结束时,我需要它释放对 dll 文件的锁定。我完全了解 AppDomains 的工作原理以及将插件加载到他们自己的 AppDomains 中的优点,但是对于这个特定的应用程序,我没有这样做。