2011-01-17 3 views
0

Недавно я установил Windows 7, 64 бит на свою машину, чтобы попробовать свои силы в 64 бит, сайт всегда работал нормально на 32-битной Windows 7 (VS 2008 была средой разработки).ASP.NET MVC на IIS 7.5, Windows 7 64 бит

Этот веб-сайт разрабатывается в Visual Studio 2008 с таргетингом на .Net 3.5 fx и ASP .NET MVC1.

На этой 64-битной машине я установил VS 2010 и начал использовать ее для веб-сайта (мы смотрим на переход на VS2010, а также планируем развернуть наш сайт на 64-битной машине). Веб-сайт построен отлично на VS 2010.

Но когда я открыл сайт, он дал следующую ошибку.

Server Error in '/' Application.

is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.BadImageFormatException: is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)

Здесь приведено краткое описание трассировки для вышеуказанной ошибки. Trace, App Pool 32 bit false

Я даже попытался запустить aspnet_regiis -i для .Net 2.0 в c: \ windows \ Microsoft .Net \ Framework64.

Затем я также попытался установить приложение в 32 бит, включив 32-битные настройки для пула приложений. Но даже этот трюк работает для меня.

ошибки я получил после включения 32 бита на App Бассейне

The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

трассы похож на то, что я вставил выше.

Любые идеи о том, как я могу это решить.

ответ

0

Настройки, которые я упомянул в моем вопросе, помогли мне запустить мой Webapp в 32-битном режиме на 64-битной ОС.

Я ничего не меняю на своей машине после того, как сделал, как указано выше. Итак, мой рабочий процесс работает в 32-битном режиме.

Я думаю, нам нужно посмотреть на замену некоторых неуправляемых dll на управляемые.

Преимущества работы IIS в 32-разрядной версии на 64 бит будут заключаться в том, что мой IIS получит больше адресного пространства, а мой кеш в памяти может быть больше на 64 бит.

Более подробную информацию о преимуществах, работающих под управлением IIS в 32 бит на 64 бит здесь What are the pros and cons of running IIS as 32bit vs 64bit on a 64bit OS?

1

Похоже, что одна из ваших зависимостей использует x86 версию сборки. Чаще всего это то, что обертывает COM-объект или вызывает собственные методы p/invoke.

Я бы начал с использования рефлектора, чтобы посмотреть на зависимости и посмотреть, можете ли вы найти плохую зависимость.

+0

Если то так, то установка приложения-пул до 32 бит и 32 бит регистрации .net (aspnet_regiis -i) должна решить эту проблему? –

+0

Из моего опыта получение файла, не найденного вместе с плохим изображением, заключается в том, что что-то пытается запустить в среде, которую он не ожидает. Обычно я могу найти его только, отслеживая его, идя по графику зависимости. –

+0

Включение ведения журнала фьюжн обычно помогает определить, что происходит. –

0

Убедитесь, что вы создаете свои DLL для платформы «Любой процессор» с помощью Configuration Manager. Системе будет только сложно, если вы попытаетесь получить доступ к 64-битной сборке для другой сборки, помеченной только как 32Bit.

Вы можете проверить отдельные DLL-файлы с помощью инструмента ConFlags.exe SDK для своих сборок. Это приведет к следующим выводам:

Microsoft (R) .NET Framework CorFlags Conversion Tool. Версия 2.0.50727.42 Авторское право (c) Корпорация Microsoft. Все права защищены.

Версия: v2.0.50727 CLR Header: 2,5 PE: PE32 CorFlags: 1 ILONLY: 1 32BIT: 0 Подпись: 0

Флаг 32BIT будет установлен, если вы компиляции сборки для 32-битного исполнения.

Я не уверен, но включение регистрации FUSION может помочь вам найти виновника.

+0

Fusion logging - очень полезная вещь. Спасибо, что указали это. –

2

Решение этой ошибки просто изменить конфигурацию II7.

  1. Перейти к IIS. Нажмите Пул приложений.
  2. Ищите свое веб-приложение в пуле приложений. 4. Перейти к дополнительным настройкам, щелкнув правой кнопкой мыши на ранее выбранном пуле приложений.
  3. Включите 32-разрядные приложения, проверив его.

enter image description here

Смежные вопросы