Visual Studio - x86, пока по крайней мере не выйдет 2010 г. обновление: это все еще проблема в VS2010, нет встроенной поддержки 64-битного Cassini. Мой вопрос: кто-нибудь может придумать способ или знает независимый сервер отладки ASP.NET, который x64 для 2008 или 2010?
Справочная информация. Наше приложение ASP.NET работает под управлением Oracle как БД. Поскольку мы находимся на 64-битных серверах из-за проблем с памятью позже, нам нужно использовать 64-битные драйверы Oracle (Instant Client).
Установка:
- x64 ОС (XP или Windows 7)
- IIS (6 или 7, оба x64 пула приложений)
- Oracle 64-bit Instant Client (отдельный каталог в PATH)
- Visual Studio 2008 SP1 Visual 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>
работает .
Второе, более долгосрочное решение было полностью исключено из клиента Oracle, теперь мы используем dotConnect для Oracle для нашего поставщика Linq-to-SQL, и поскольку он полностью управляет кодом с использованием Прямое TCP-соединение, у нас больше нет конкретного 32/64-битного кода в приложении, что на намного проще в обслуживании.
Надеюсь, тот, кто найдет это, также найдет продолжение полезным. Если у вас есть вопросы по поводу какого-либо решения, которое я в конечном итоге использовал, прокомментируйте, и я постараюсь объяснить более подробно.