Почему не все сборки в GAC построены как MSIL?


В чем причина того, что не все сборки в глобальном кэше сборок (GAC) построены как MSIL? Я вижу типы архитектуры x86 и AMD64, используемые для некоторых сборок, как в примере ниже, но не для других:

C:Windowsassembly

Введите описание изображения здесь

Почему System.Data построен для двух разных процессорных архитектур, в то время как System.Core является MSIL?

C:WindowsMicrosoft.NETassembly

Введите описание изображения здесь

Аналогичная картина наблюдается и во второй версии GAC, показанной выше. Сборки разбиты на разные архитектуры, но не все они встроены в версии 32/64 - некоторые просто MSIL.

1 8

1 ответ:

При компиляции библиотеки вы можете выбрать "любой процессор" или конкретную архитектуру процессора.

Библиотекам "Any CPU" требуется только одна запись в GAC, и вся сборка компилируется в MSIL.

Для других сборок требуется отдельная библиотека для каждой архитектуры. Эти библиотеки созданы для каждого типа ЦП, и в GAC имеется несколько копий. Наиболее распространенной причиной является включение неуправляемого кода или загрузка собственной библиотеки dll, которая является архитектурой специфический.

В вашей системе примера.Ядро, вероятно, полностью управляемый код, тогда как система.Данные, вероятно, построены поверх кучи собственных библиотек windows.

Приложения, работающие в 32-битном режиме, загружают 32-битную версию библиотеки, в то время как приложения, работающие в 64-битном режиме, загружают 64-битную версию.