我们有不同版本的非强名命的程序集,并且在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文档,除非程序集具有强名称,否则会忽略所述版本。我会看看我是否可以把它挖出来。
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx
第2步检查是否已加载,这是特定于版本的,即使是没有强名称的项目。
第4步尝试通过探测加载程序集,这不是特定于版本的。
我感到困惑的是,如果您的配置文件中没有任何信息,它是如何首先找到DLL的?我认为我的理解也存在差距:-)。