Я только что работал над переносом промежуточного веб-сайта с II6 на IIS8.
IIS8 поставляется с параметром Включить 32-разрядные приложения, который является настоящим ложным флагом. Объяснение этого флага:
[enable32BitAppOnWin64] Если установлено значение True для пула приложений в 64-разрядной операционной системе, рабочие процессы, обслуживающие пул приложений, работают в режиме WOW64 (Windows на Windows64). В режиме WOW64 32-битные процессы загружают только 32-битные приложения.
Теперь, если я установлю это значение на False
, мой веб-сайт перестанет обслуживаться, и я получу 500 сообщений об ошибке:
Не удалось загрузить фильтр ISAPI «C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll» из-за проблемы с конфигурацией. Текущая конфигурация поддерживает только загрузку образов, созданных для архитектуры процессора AMD64. Поле данных содержит номер ошибки. Чтобы узнать больше об этой проблеме, в том числе о том, как устранить такую ошибку несоответствия архитектуры процессора, см.
Теперь я догадался, что это должна быть сборка с установленными флагами x86, поэтому я следовал инструкциям из этот пост с использованием CorFlags, чтобы проверить это. Но все возвращают Any CPU
, т.е.
Version : v4.0.30319
CLR Header : 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 0
Есть небольшие версии, но это суть.
Так почему же мне нужно установить для параметра "Включить 32-разрядные приложения" значение True
?
Поэтому я провел дополнительное исследование с помощью Process Explorer (это < href="https://stackoverflow.com/questions/247098/x64-net-compilation-process-explorer-oddity">вопрос помог), и кажется, что если я установлю для включения 32-разрядных приложений значение False
и хотя Corflags говорит, что им не требуется 32-разрядная версия, некоторые из dll имеют 32-разрядный тип изображения: