我有一个依赖库的可执行文件。我还有一个“加载器”应用程序,它将可执行文件加载到单独的AppDomain(我的“沙盒”)中并在那里运行。该库需要从沙盒外部进行初始化,因此我需要在加载可执行文件之前加载该库。这正常工作,但是当我现在加载可执行文件时,库会再次加载,并且可执行文件使用未初始化的副本。
只有在我像这样加载库时才会发生这种情况:
然而,使用LoadFrom会锁定文件。我需要能够删除/写入该文件,因为我的应用程序需要重新加载整个沙箱及其中的所有程序集。
我还尝试注册AppDomain.AssemblyResolve,但只有在找不到文件时才会调用它,这并不是我想要的...
示例日志输出:
- 加载库X <-手动加载 - 初始化库X - 加载可执行文件Y - 加载库X <-糟糕,我想使用已加载的X!
所以我的问题是:如何强制.NET使用已加载的程序集而不是加载重复的程序集?
只有在我像这样加载库时才会发生这种情况:
Assembly.Load(File.ReadAllBytes(assemblyFile.FullName));
改为:
Assembly.LoadFrom(assemblyFile.FullName);
然而,使用LoadFrom会锁定文件。我需要能够删除/写入该文件,因为我的应用程序需要重新加载整个沙箱及其中的所有程序集。
我还尝试注册AppDomain.AssemblyResolve,但只有在找不到文件时才会调用它,这并不是我想要的...
示例日志输出:
- 加载库X <-手动加载 - 初始化库X - 加载可执行文件Y - 加载库X <-糟糕,我想使用已加载的X!
所以我的问题是:如何强制.NET使用已加载的程序集而不是加载重复的程序集?