并非全局程序集缓存(GAC)中的所有程序集都构建为MSIL
的原因是什么?我看到x86
和AMD64
架构类型用于某些程序集,如下例所示,但不适用于其他程序集:
C:\Windows\assembly\
为什么System.Data
是针对两种不同的处理器架构而构建的,而System.Core
是MSIL
?
C:\Windows\Microsoft.NET\assembly
在第二版GAC下可以看到类似的模式,如上所示。程序集分为不同的体系结构,但并非所有体系结构都内置在32/64
版本中 - 有些只是MSIL
。
答案 0 :(得分:10)
编译库时,您可以选择“任意CPU”或特定处理器体系结构。
“Any CPU”库只需要GAC中的单个条目,整个程序集就会编译为MSIL。
其他程序集需要为每个体系结构使用不同的库。这些库是为每种CPU类型构建的,GAC中有多个副本。最常见的原因是包含非托管代码或加载特定于体系结构的本机dll。
在您的示例中,System.Core可能是完全托管的代码,而System.Data可能是在一堆本机Windows库之上构建的。
以32位模式运行的应用程序将加载32位版本的库,而以64位模式运行的应用程序将加载64位版本。