Почему не все сборки в GAC построены как MSIL?
В чем причина того, что не все сборки в глобальном кэше сборок (GAC) построены как MSIL
? Я вижу типы архитектуры x86
и AMD64
, используемые для некоторых сборок, как в примере ниже, но не для других:
C:Windowsassembly
Почему System.Data
построен для двух разных процессорных архитектур, в то время как System.Core
является MSIL
?
C:WindowsMicrosoft.NETassembly
Аналогичная картина наблюдается и во второй версии GAC, показанной выше. Сборки разбиты на разные архитектуры, но не все они встроены в версии 32/64
- некоторые просто MSIL
.
1 ответ:
При компиляции библиотеки вы можете выбрать "любой процессор" или конкретную архитектуру процессора.
Библиотекам "Any CPU" требуется только одна запись в GAC, и вся сборка компилируется в MSIL.
Для других сборок требуется отдельная библиотека для каждой архитектуры. Эти библиотеки созданы для каждого типа ЦП, и в GAC имеется несколько копий. Наиболее распространенной причиной является включение неуправляемого кода или загрузка собственной библиотеки dll, которая является архитектурой специфический.
В вашей системе примера.Ядро, вероятно, полностью управляемый код, тогда как система.Данные, вероятно, построены поверх кучи собственных библиотек windows.
Приложения, работающие в 32-битном режиме, загружают 32-битную версию библиотеки, в то время как приложения, работающие в 64-битном режиме, загружают 64-битную версию.