【发布时间】:2010-10-24 15:36:01
【问题描述】:
Visual Studio 是 x86 直到 至少 2010 版本发布 更新:这在 VS2010 中仍然是一个问题,没有原生 64 位 Cassini 支持。我的问题是任何人都可以想到一种方法或知道一个独立的 ASP.NET 调试服务器,它是 2008 年或 2010 年的 x64?
背景:我们的 ASP.NET 应用程序针对 Oracle 作为数据库运行。由于稍后我们在 64 位服务器上处理内存问题,因此我们需要使用 Oracle 的 64 位驱动程序(Instant Client)。
设置:
- x64 操作系统(XP 或 Windows 7)
- IIS(6 或 7,均为 x64 应用程序池)
- Oracle 64-bit Instant Client(单独的目录,在 PATH 中)
-
Visual Studio 2008 SP1Visual Studio 2010
在 IIS 中,应用程序池以 64 位运行,按预期使用 Oracle 驱动程序,但是由于 WebDev.WebServer.exe 是 32 位,您将获得 BadImageFormatException 因为它试图在 32 位环境中加载 64 位驱动程序 DLL。我们所有的开发人员都希望能够通过 Visual Studio 2008 使用快速调试服务器,但由于它以 32 位运行,我们无法做到。我们遇到的一些问题是在应用程序启动期间,因此虽然我们有时会附加到 IIS 进程,但这还不足以追踪问题。
是否有任何替代方案或解决方法?我们希望尽可能匹配我们的 Dev/Val/Prod 层,因此在 x64 中运行的一切都是理想的。
VS 2010 更新
自从第一次发布这个问题以来,对这个问题进行了很多更改,第一个 VS2010 现已发布,这里仍然存在相同的问题,但我所在的项目没有。我们经历了 2 次更改来解决这个问题,所以我会发布这些内容,希望它可以减轻其他人的痛苦:
第一个解决方案是在 32 位以上加载 Oracle x86,在 64 位模式下加载 x64,我们通过 web.config 在 64 位下运行时替换程序集引用来做到这一点,如下所示:
<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 的文章),这是不久前的事了。除了配置,我们还加载了Oracle.DataAccessinto the GAC 的 32 位和 64 位版本。 Oracle 10g 的 32 位版本是 10.xxx,64 位版本是 2.1xxx,所以只需 swapping the binding using <assemblyBinding> works。
第二个更长期的解决方案是完全脱离 Oracle 客户端,我们现在使用 dotConnect for Oracle 作为我们的 Linq-to-SQL 提供程序,因为它是使用直接 TCP 连接的完全托管代码,所以我们有应用程序中不再有 32/64 位特定代码,这非常更易于维护。
我希望发现此内容的人也发现后续内容也很有用。如果您对我最终使用的任一解决方案有任何疑问,请发表评论,我会尝试更详细地解释。
【问题讨论】:
-
您是否在 Stack Overflow 之外找到了这个问题的答案?
-
我没有...从我所读到的内容来看,由于附加移植问题并且没有进一步破坏它们,因此没有计划以原生 x64 风格制作 VS 2010比 2008-2010 年的升级。目前我在 32 位模式下运行不同的 PATH 变量,因此 VS 的 Web 服务器会看到不同的 Instant Client 目录。这让我可以同时拥有一个 x64 和 x86 即时客户端,并且两者都可以工作。这并不完全理想,因为我仍然必须附加到 x64 IIS 进程来调试任何可能与 x86/x64 兼容性相关的问题,但它更适合正常开发。
标签: asp.net oracle 64-bit webdev.webserver