Visual Studio 2008 работает над сборкой;Тот же проект, составленный в 2010 году, не - PullRequest
2 голосов
/ 01 февраля 2011

Иметь проект, который был создан в 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, на которые есть ссылки)

Два вопроса:

  1. Почему версия Visual Studio 2008 работает вообще?
  2. Как заставить работать версию Visual Studio 2010? И что 2010 делает по-другому, что вызывает проблему?

Заранее спасибо!
Джеймс

1 Ответ

1 голос
/ 02 февраля 2011

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

...