我们有不同版本的非强名称程序集,并且在 app.exe.config 中没有绑定(bind)重定向/探测路径到它们。例如,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 文档,除非程序集是强命名的,否则这些版本会被忽略。我看看能不能挖出来
最佳答案
http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx
第 2 步是检查它是否已加载,这是特定于版本的,即使是没有强命名的项目。
第 4 步尝试通过探测加载程序集,这不是特定于版本的。
我感到困惑的是,如果您的配置文件中没有任何信息,那么首先如何找到 DLL?我认为我的理解也存在差距:-)。
关于.net - .NET 运行时如何定位非强命名的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252731/