【发布时间】:2011-11-03 20:27:04
【问题描述】:
我在加载程序集时遇到了一个不寻常的问题。假设我们有引用 FooInfra.dll 版本 1.0.0.0 的 Foo.dll,它是强名称签名的。
我们正在使用外部可执行文件来加载 Foo.dll 并在其中调用 MyMethod()。由于某种原因,在特定模式下运行exe时,我们称之为模式A,即使意外部署了FooInfra.dll 2.0.0.0版本,MyMethod()也能成功运行。如果在“模式 B”下运行它,我们会得到预期的错误,即未找到正确的程序集。
我的问题:这怎么可能?我认为对于强命名程序集,必须使用正确的版本。我已经附加了 windbg 以确保它没有从模式 A 中的其他位置加载 FooInfra.dll,但它不是 - 它实际上是在加载版本 2.0.0.0。
是否有可能在模式 A 中,外部可执行文件显式加载 DLL,在 MyMethod 运行时绕过强名称检查,因为只加载程序集?
任何有关该问题的见解,或如何调试/诊断将不胜感激。谢谢!
【问题讨论】:
-
对于自 .NET 3.5 SP1 起以完全信任方式运行的应用程序,将跳过强名称验证。
标签: c# dll assemblies strongname