我们有不同版本的非强名称程序集,并且在 app.exe.config 中没有绑定重定向/探测路径到它们。例如,MyDll (1.0.0.0_null_neutral) 和 MyDll (2.0.0.0_null_neutral)。相对于 app.exe,这些程序集存储在 LAC\MyDll_1.0.0.0_null_neutral 和 LAC\MyDll_2.0.0.0_null_neutral 中。
我的理解是,因为 MyDll 程序集不是强命名的,.NET 运行时不会区分不同版本的 MyDll。因此,如果已将 MyDll 1.0.0.0 加载到内存中并且执行了针对 MyDll 2.0.0.0 构建的某些代码,则 .NET 运行时将不会加载 MyDll 2.0.0.0。
但是,当我使用 VS2008 附加到该进程并查看模块窗口时,我注意到 MyDll 1.0.0.0 和 MyDll 2.0.0.0 都是从 LAC 文件夹加载的。
我的理解似乎在某个地方存在差距。有人可以指出吗?
编辑:感谢到目前为止的回复。是的,我跳过了那一点。可执行文件侦听 AssemblyResolve 事件,并通过查看 LAC 来处理它。
我很确定我之前看过一些 MSDN 文档,除非程序集是强命名的,否则这些版本会被忽略。我看看能不能挖出来