Visual Studio - это x86 до по крайней мере релиз 2010 года :. Это все еще проблема в VS2010, нет поддержки 64-разрядного Cassini на базе 64-разрядной версии. Мой вопрос: может ли кто-нибудь подумать о способе или знать независимый сервер отладки ASP.NET, который x64 для 2008 или 2010?
Справочная информация. Наше приложение ASP.NET работает с Oracle как DB. Поскольку мы уже на 64-битных серверах для проблем с памятью, нам нужно использовать 64-разрядные драйверы Oracle (Instant Client).
Настройка:
- x64 ОС (XP или Windows 7)
- IIS (6 или 7, оба пула приложений x64)
- 64-битный мгновенный клиент Oracle (отдельный каталог в PATH)
-
Visual Studio 2008 SP1Visual Studio 2010
В IIS пул приложений работает как 64-разрядный, использует драйверы Oracle по назначению, но поскольку WebDev.WebServer.exe - 32-разрядный, вы получите BadImageFormatException, потому что он пытается загрузить 64-разрядные DLL файлы драйверов в 32-разрядной среде. Все наши разработчики хотели бы иметь возможность использовать быстрый сервер отладки через Visual Studio 2008, но поскольку он работает как 32-битный, мы не можем. Некоторые проблемы, с которыми мы сталкиваемся, во время запуска приложения, поэтому, хотя мы иногда привязываемся к процессу IIS, этого недостаточно для отслеживания проблемы.
Есть ли какие-либо альтернативы или обходы? Мы хотели бы как можно больше сопоставить наши уровни Dev/Val/Prod, поэтому все, что работает в x64, было бы идеальным.
Обновление для VS 2010
Много изменений в этом вопросе, так как он был впервые опубликован, сначала VS2010 вышел, у него все еще есть те же проблемы, но проект, над которым я работаю, не работает. Мы прошли через 2 изменения, чтобы решить эту проблему, поэтому я опубликую их в надежде, что это спасет чужое горе:
Первое решение заключалось в том, чтобы загрузить Oracle x86 в 32-бит больше, x64 в 64-разрядном режиме, мы сделали это, заменив ссылку на сборку при работе под 64-разрядной версией через web.config, например:
<configuration>
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" processorArchitecture="amd64" />
<bindingRedirect oldVersion="2.0.0.0-10.9.9.9" newVersion="2.102.3.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Ключевым здесь является processorArchitecture="amd64"
, это означает, что замена происходит только при работе под 64-разрядной версией.
Обратите внимание, что эти версии могут быть устаревшими (если вы читаете эту заботу о Oracle специально), это было некоторое время назад. В дополнение к конфигурации мы загрузили 32-разрядные и 64-разрядные версии Oracle.DataAccess
в GAC. 32-разрядные версии 10.xxx
для Oracle 10g, 64-разрядные версии 2.1xxx
, поэтому просто замена привязки с помощью <assemblyBinding>
works.
Второе, более долгосрочное решение полностью отошло от клиента Oracle, теперь мы используем dotConnect для Oracle для нашего Linq- to-SQL, и поскольку он полностью управляет кодом, используя прямое TCP-соединение, у нас нет более 32/64-битного кода в приложении, который намного легче поддерживать.
Я надеюсь, что тот, кто найдет это, также найдет полезную информацию. Если у вас есть вопросы о любом решении, которое я использовал, прокомментируйте, и я попытаюсь объяснить более подробно.