Подтвердить что ты не робот

Как использовать WebDev.WebServer.exe(VS Web Server) в x64?

Visual Studio - это x86 до по крайней мере релиз 2010 года :. Это все еще проблема в VS2010, нет поддержки 64-разрядного Cassini на базе 64-разрядной версии. Мой вопрос: может ли кто-нибудь подумать о способе или знать независимый сервер отладки ASP.NET, который x64 для 2008 или 2010?

Справочная информация. Наше приложение ASP.NET работает с Oracle как DB. Поскольку мы уже на 64-битных серверах для проблем с памятью, нам нужно использовать 64-разрядные драйверы Oracle (Instant Client).

Настройка:

В 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-битного кода в приложении, который намного легче поддерживать.

Я надеюсь, что тот, кто найдет это, также найдет полезную информацию. Если у вас есть вопросы о любом решении, которое я использовал, прокомментируйте, и я попытаюсь объяснить более подробно.

4b9b3361

Ответ 1

Две идеи:

  • Cobble что-то вместе с XSP из проекта Mono.
  • Тестирование в полностью 32-битной среде, развертывание в 64-битной среде.

Ответ 2

Вы можете попытаться скомпилировать 64-разрядный Cassini из source.

Ответ 3

Используйте IIS на локальной машине.

Ответ 4

Даже вы используете 64-битную среду, временные ссылки на 32-разрядные DLL в Visual Studio (или вручную скопируйте ее в папку BIN), чтобы вы могли ее отлаживать. Имейте в виду, что каждый раз, когда вы компилируете код, он будет повторно копировать 64-битные сборки в папке BIN.