.NET运行时如何找到非强名称的"程序集"?

ck.*_*ck. 5 .net strongname assembly-resolution

我们有不同版本的非强名称程序集,并且在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文档,除非程序集具有强名称,否则会忽略所述版本.我会看看我是否可以把它挖出来.

bry*_*ker 1

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

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

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

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