【发布时间】:2017-02-28 18:16:01
【问题描述】:
我有一个依赖于库的可执行文件。我还有一个“加载器”应用程序,它将可执行文件加载到单独的 AppDomain(我的“沙箱”)中并在那里运行。该库需要从沙箱外部进行初始化,因此我需要在加载可执行文件之前加载该库。这按预期工作,但是当我现在加载可执行文件时,库会再次加载,并且可执行文件使用未初始化的副本。
只有当我像这样加载库时才会发生这种情况:
Assembly.Load(File.ReadAllBytes(assemblyFile.FullName));
而不是这个:
Assembly.LoadFrom(assemblyFile.FullName);
但是,使用 LoadFrom 会锁定文件。我需要能够删除/写入文件,因为我的应用程序需要能够重新加载整个沙箱和其中的所有程序集。
我也尝试注册 AppDomain.AssemblyResolve,但只有在找不到文件时才会调用它,这不是我想要的...
示例日志输出:
- 加载库 X
- 初始化库 X
- 加载可执行文件 Y
- 正在加载库 X
所以我的问题是:如何强制 .net 使用已加载的程序集而不是加载副本?
【问题讨论】:
-
两个负载是否发生在同一个 AppDomain 中?
-
@DanField 是的,我仔细检查了
标签: c# .net-assembly appdomain