Visual Studio是x86直到至少2010版本出现 更新:这仍然是VS2010中的一个问题,没有原生的64位Cassini支持。我的问题是,任何人都可以想到一种方法或知道一个独立的ASP.NET调试服务器,它是2008年或2010年的x64吗?
背景:我们的ASP.NET应用程序作为数据库运行在Oracle上。由于我们以后会在64位服务器上出现内存问题,因此我们需要使用Oracle的64位驱动程序(Instant Client)。
设定:
在IIS中,应用程序池以64位运行,按预期使用Oracle驱动程序,但是由于 WebDev.WebServer.exe 是32位,因此您将获得 BadImageFormatException 因为它试图在32位环境中加载64位驱动程序DLL。我们所有的开发人员都希望能够通过Visual Studio 2008使用快速调试服务器,但由于它以32位运行,我们无法做到。我们遇到的一些问题是在应用程序启动期间,因此虽然我们附加到IIS进程有时不足以跟踪问题。
有没有替代方案或解决方法?我们希望尽可能地匹配我们的Dev / Val / Prod层,因此在x64中运行的所有内容都是理想的。
自这个问题首次发布以来,这个问题发生了很多变化,首先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.DataAccess
into 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位特定代码, 更容易维护。
我希望发现这一点的人也会发现后续行动也很有用。如果您对我最终使用的任何一种解决方案有疑问,请发表评论,我会尝试更详细地解释。