9

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

C:\Windows\assembly\

在此处输入图像描述

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

C:\Windows\Microsoft.NET\assembly

在此处输入图像描述

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

4

1 回答 1

14

编译库时,您可以选择以“任何 CPU”或特定处理器架构为目标。

“任何 CPU”库只需要 GAC 中的一个条目,并且整个程序集被编译为 MSIL。

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

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

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

于 2015-01-12T01:39:40.283 回答