如何解决统一在运行时卸载DLL
因此,当前我有一个在应用程序启动时加载的dll。我都用过
using (FileStream fileStream = File.Open(DLLData.LocalDLLFolder() + "DLLSupport.dll",FileMode.Open))
{
using (MemoryStream memoryStream = new MemoryStream())
{
byte[] buffer = new byte[1024];
int read = 0;
while ((read = fileStream.Read(buffer,1024)) > 0)
{
memoryStream.Write(buffer,read);
}
Assembly assembly = Assembly.Load(memoryStream.ToArray());
Type _main = assembly.GetType("DLLSupport.DebugStart");
dllSupport = new GameObject();
dllSupport.AddComponent(_main);
memoryStream.Close();
fileStream.Close();
}
}
和Assembly.LoadFrom
问题是当运行时,如果更新了,我将再次下载相同的DLL。 如果我尝试使用Assembly.LoadFrom下载它,因为Unity正在使用该文件,因此它不允许我访问。
使用其他方法,我可以在需要时下载或删除它,但事实是,即使我再次调用该方法,它也将像上一个一样工作,直到重新启动应用程序为止。 (也许有什么方法可以卸载我没有找到的?)
我也使用AppDomain尝试过,但是我会得到FileNotFoundException: Could not load file or assembly or one of its dependencies
有什么主意吗?
解决方法
您不能从当前的AppDomain中卸载程序集,但是可以创建一个AppDomain,然后将程序集加载到其中,在该AppDomain上执行一些代码,然后在必要时卸载该AppDomain,这也将在该域上卸载该程序集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。