16

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 位即时客户端(单独的目录,在 PATH 中)
  • 视觉工作室 2008 SP1视觉工作室 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 的文章),这已经是前一阵子了。除了配置之外,我们还将 32 位和 64 位版本加载Oracle.DataAccess 到 GAC中。32 位版本适用10.xxx于 Oracle 10g,64 位版本适用于2.1xxx,因此只需使用works交换绑定<assemblyBinding>即可。

第二个更长期的解决方案是完全脱离 Oracle 客户端,我们现在将dotConnect for Oracle用于我们的 Linq-to-SQL 提供程序,并且由于它是使用直接 TCP 连接的完全托管代码,我们没有更多的 32应用程序中的 /64 位特定代码,易于维护。

我希望任何发现这一点的人也会发现后续工作也很有用。如果您对我最终使用的任一解决方案有疑问,请发表评论,我将尝试更详细地解释。

4

4 回答 4

3

两个想法:

  1. 用Mono项目 中的 XSP 拼凑一些东西。
  2. 在完全 32 位环境中测试,部署到 64 位环境。
于 2009-08-14T07:43:59.413 回答
2

您可以尝试从source编译 64 位 Cassini 。

于 2009-08-13T18:38:56.863 回答
0

在本地计算机上使用 IIS。

于 2009-08-15T00:42:12.177 回答
0

即使您使用的是 64 位环境,在 Visual Studio 中临时引用 32 位 dll(或手动将其复制到 BIN 文件夹中)以便您可以调试它。请记住,每次编译代码时,它都会重新复制 BIN 文件夹中的 64 位程序集。

于 2010-04-12T12:51:46.497 回答