繁体   English   中英

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

[英]Wrong version of strong name Dll loading successfully

我在程序集加载中遇到了一个不寻常的问题。 假设我们有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运行时的强名称检查?

任何对此问题的见解,或如何调试/诊断将不胜感激。 谢谢!

您没有指定每种情况下的负载如何不同。 另外-我将使用Fusion而不是windbg来记录您的程序集加载。 它会向您显示正在探查哪些路径,并且可以看到在情况2中它是否完全忽略了强名称。

如果没有更多的技术细节,那就很难说了。 如果foo确实也使用强名称引用了强命名程序集的引用(检入反射器),则Id期望它会失败,但是可能存在文档,但是您正在以模式A加载,该模式设计使它跳过了检查(再次需要更多详细信息)

您有机会使用-Vr选项吗? http://www.lookout.net/2006/04/09/bypassing-strong-name-verification-for-a-net-assembly/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM