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

时间:2015-01-11 23:29:15

标签: .net gac gac-32 gac-64 gac-msil

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

C:\Windows\assembly\

enter image description here

为什么System.Data是针对两种不同的处理器架构而构建的,而System.CoreMSIL

C:\Windows\Microsoft.NET\assembly

enter image description here

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

1 个答案:

答案 0 :(得分:10)

编译库时,您可以选择“任意CPU”或特定处理器体系结构。

“Any CPU”库只需要GAC中的单个条目,整个程序集就会编译为MSIL。

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

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

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