Иметь проект, который был создан в Visual Studio 2008 и развернут на 64-разрядном сервере Windows 2003. Это приложение ссылается на 32-разрядный Interop.ActiveDs.dll. Изначально приложения были скомпилированы для «Любого процессора», однако явная компиляция как «x86» не решает проблему. Проект нацелен на 3,5 рамки.
Сервер работает под управлением IIS 6.0 в 64-разрядном режиме. Когда мы развертываем версию, скомпилированную в Visual Studio 2008, приложение работает отлично; все страницы отображаются. Оглядываясь назад, это действительно удивительно.
Мы перенесли приложение в Visual Studio 2010 (мы не изменили целевую платформу) и снова развернули. Теперь мы получаем BadImageFormatException, загружающий Interop.ActiveDs.dll. Что на самом деле имеет больше смысла, чем версия 2008 года.
Чтобы решить эту проблему, мы установили для Enable32bitAppOnWin64 значение true и запустили aspnet_regiis.exe -i из 32-разрядной папки инфраструктуры 2.0 (согласно различным инструкциям в Интернете). В IIS, расширениях веб-служб, было две версии ASP.NET 2.0, одна для 32-битной и одна для 64-битной. Мы запретили 64-битную версию, перезапустили IIS и запустили сайт.
Что мы ожидали: приложение должно работать как 32-разрядное, загружать взаимодействие и отображать
Что мы получили: «Сервис недоступен»
Все остальные веб-страницы, которые ранее работали, отображали то же сообщение, что и версия Visual Studio 2008.
Страница поддержки здесь точно описывает проблему, но говорит нам, чтобы мы сделали именно то, что мы сделали для ее решения (включите 32-битный режим).
Мы откатились к 64-битному режиму в IIS и развернули версию Visual Studio 2008 на данный момент, но нам действительно нужно выяснить, как заставить это приложение работать и загрузить взаимодействие (есть также 32-битный Oracle DLL, на которые есть ссылки)
Два вопроса:
- Почему версия Visual Studio 2008 работает вообще?
- Как заставить работать версию Visual Studio 2010? И что 2010 делает по-другому, что вызывает проблему?
Заранее спасибо!
Джеймс