【发布时间】:2015-03-13 16:29:31
【问题描述】:
令我们惊讶的是,以下语句没有抛出异常!
Assembly.Load("System.Data, Version=4.0.99.99, Culture=neutral, PublicKeyToken=b77a5c561934e089");
GAC 仅包含版本4.0.0.0 - 没有4.0.99.99。请注意,尝试加载 4.1.0.0 失败。我们仅在 .NET 框架程序集上观察到了这种行为。
为什么会这样? .NET 框架程序集是否有任何默认程序集绑定重定向?是否还有其他魔法发生?
据我所知,只有在找到完全相同的版本时才应加载强名称程序集。
【问题讨论】:
-
确实如此。如果为
AppDomain.CurrentDomain.AssemblyResolve设置了事件处理器,上面的不会触发事件处理器;但是如果您更改程序集次要版本(例如更改为4.1.99.99)或公钥令牌,则会触发该事件。从那我猜,版本号的最后两个重要部分被忽略了。 -
这有记录吗?我们仅对 .NET 框架程序集观察到这种行为。通常,如果定义了绑定重定向,您会期望这种行为 -> .NET 框架程序集是否有任何默认绑定重定向?
-
我没有检查过,但也许
System.Data4.0 版有一个publisher policy file 可以进行重定向。 -
检查您的 app.config 或 web.config 是否有任何绑定重定向。一些 Nuget 包添加了可能导致此问题的运行时绑定设置。
-
@Amy:谢谢,当然我们已经检查过了。我们甚至创建了一个最小的示例解决方案来绝对确定。
标签: c# .net .net-assembly