为什么GAC中的所有程序集都不是作为MSIL构建的?

B.K*_*.K. 8 .net gac gac-32 gac-64 gac-msil

是什么原因导致全局程序集缓存(GAC)中的所有程序集都不是构建为MSIL?我看到x86AMD64一些程序集使用的体系结构类型,如下例所示,但不适用于其他程序集:

C:\Windows\assembly\

在此输入图像描述

为什么System.Data建了两个不同的处理器架构,而System.CoreMSIL

C:\Windows\Microsoft.NET\assembly

在此输入图像描述

在上面显示的第二版GAC下可以看到类似的模式.程序集分为不同的体系结构,但并非所有体系结构都构建在32/64版本中 - 有些只是MSIL.

Jar*_*lls 10

编译库时,可以选择"任何CPU"或特定处理器体系结构.

"任何CPU"库只需要GAC中的单个条目,整个程序集将编译为MSIL.

其他程序集需要为每个体系结构使用不同的库 这些库是为每种CPU类型构建的,GAC中有多个副本.最常见的原因是包含非托管代码或加载特定于体系结构的本机dll.

在您的示例中,System.Core可能是完全托管的代码,而System.Data可能构建在一堆本机Windows库之上.

以32位模式运行的应用程序将加载32位版本的库,而以64位模式运行的应用程序将加载64位版本.