我遇到装配加载的一个不寻常的问题。假设我们有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运行时的强名称检查,因为只加载了程序集?
对此问题的任何见解,或如何调试/诊断将不胜感激。谢谢!
答案 0 :(得分:1)
您没有说明每种情况下负载的差异。另外 - 而不是windbg我会使用Fusion来记录你的装配加载。它将向您显示正在探测的路径,您可以看到它是否完全忽略了案例2中的强名称。
如果没有更多技术细节,那么很难说。如果foo确实有引用(检入反射器)到强名称程序集使用强名称,Id也希望它失败但是它可能存在文档然而你在模式A中加载它在设计上它会跳过检查(再次需要更多细节)
你有可能使用-Vr选项吗? http://www.lookout.net/2006/04/09/bypassing-strong-name-verification-for-a-net-assembly/