成功加载强名称Dll的版本错误

本文关键字:版本 错误 Dll 加载 强名称 成功 | 更新日期: 2023-09-27 18:13:38

我遇到了一个不寻常的程序集加载问题。假设我们有Foo.dll,它引用了强名称签名的FooInfra.dll版本1.0.0.0。

我们使用外部可执行文件来加载Foo.dll并在其中调用MyMethod()。由于某种原因,当在特定模式下运行exe时,让我们称之为模式a,即使偶然部署了FooInfra.dll版本2.0.0.0,MyMethod()也会成功运行。如果在"模式B"下运行它,我们会得到预期的错误,即没有找到正确的程序集。

我的问题是:这怎么可能?我认为对于强命名程序集,必须使用正确的版本。我已经附加了windbg,以确保它不是从模式a的不同地方加载FooInfra.dll,它不是-它真的加载版本2.0.0.0。

是否有可能在模式A中,外部可执行程序显式加载DLL,在MyMethod运行时绕过强名称检查,因为程序集只加载?

任何关于这个问题的见解,或者如何调试/诊断将非常感谢。谢谢!

成功加载强名称Dll的版本错误

您没有指定每种情况下负载是如何不同的。此外-而不是wind - dbg我会使用Fusion来记录您的组装加载。它将显示正在探测的路径,并且您可以查看它是否完全忽略了大小写2中的强名称。

如果没有更多的技术细节,很难说。如果foo确实有引用(检入反射器)到使用强名称的强命名程序集,我预计它会失败,但有可能在你在模式A中加载的文档中,通过设计它会跳过检查(再次需要更多细节)

你是否碰巧使用了-Vr选项?http://www.lookout.net/2006/04/09/bypassing-strong-name-verification-for-a-net-assembly/