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

Why are not all assemblies in GAC built as MSIL?

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

C:\Windows\assembly\

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

C:\Windows\Microsoft.NET\assembly

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

编译库时,您可以选择针对 "Any CPU" 或特定处理器架构。

"Any CPU" 库只需要在 GAC 中有一个条目,整个程序集就会编译为 MSIL。

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

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

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