6

我们有不同版本的非强名称程序集,并且在 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 文档,除非程序集是强命名的,否则这些版本会被忽略。我看看能不能挖出来

4

1 回答 1

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

第 2 步是检查它是否已加载,这是特定于版本的,即使是没有强命名的项目。

第 4 步尝试通过探测加载程序集,这不是特定于版本的。

我感到困惑的是,如果您的配置文件中没有任何信息,那么首先如何找到 DLL?我认为我的理解也存在差距:-)。

于 2010-02-12T15:47:24.607 回答