为什么 System.Net.Http 从全局程序集缓存中加载所有程序集名称?

问题描述

我想弄清楚为什么我可以从全局程序集缓存中加载程序集名称 System.Net.Http,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3aSystem.Net.Http,Version=4.1.1.3,PublicKeyToken=b03f5f7f11d50a3a

我已经安装了 .Net 4.7.2,我正在像这样加载程序集:

var assembly = Assembly.Load("System.Net.Http,PublicKeyToken=b03f5f7f11d50a3a");
Console.WriteLine(assembly.GetName().FullName);// prints "System.Net.Http,PublicKeyToken=b03f5f7f11d50a3a"

从我读到的内容来看,没有任何迹象表明从全局程序集缓存加载程序集会在加载程序集时忽略版本号,那么谁能解释为什么 .Net Framework 将这两个不同的程序集视为等效的?

>

解决方法

我找到了这个问题的部分答案。此行为是 .Net Framework 统一表的结果。这是 .Net Framework 运行时内部的一个构造,它了解选定数量的程序集,System.Net.Http 就是其中之一。

但是,我找不到任何关于此的文档,也找不到任何方法可以找出此统一表中存在哪些程序集。