令我们惊讶的是,以下声明并不是抛出异常!为什么加载System.Data 4.0.99.99成功?
Assembly.Load("System.Data, Version=4.0.99.99, Culture=neutral, PublicKeyToken=b77a5c561934e089");
海关总署只包含版本4.0.0.0
- 没有4.0.99.99
。请注意,试图加载4.1.0.0
失败。我们只观察了.NET框架程序集的这种行为。
这是为什么?是否有适用于.NET框架程序集的默认程序集绑定重定向?还有其他的魔法吗?
据我所知,只有在找到完全相同的版本时才能加载强名称的程序集。
它肯定是这样。如果你为'AppDomain.CurrentDomain.AssemblyResolve'设置了一个事件处理程序,上面不会触发事件处理程序;但如果您更改汇编副版本(例如,转换为“4.1.99.99”)或公钥标记,则该事件将被触发。从那里我猜想版本号的最后两个重要部分被忽略。 – stakx 2015-03-13 16:38:20
是否记录在案?我们只观察.NET框架程序集的这种行为。通常情况下,如果绑定重定向被定义,你会期望这种行为 - >是否有任何.NET框架程序集的默认绑定重定向? – 2015-03-13 16:39:06
我没有检查,但也许'System.Data'版本4.0有一个[发布者策略文件](https://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29。 aspx#BKMK_Redirectingassemblyversions byusingpublisherpolicy),它执行重定向。 – stakx 2015-03-13 16:42:55