统一在运行时卸载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,这也将在该域上卸载该程序集。

参考:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/ms173101(v=vs.90)?redirectedfrom=MSDN

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...