【问题标题】:How to Make ODP.NET 4.0 (64 bit) working on 64 bit machine Windows 7?如何使 ODP.NET 4.0(64 位)在 64 位机器 Windows 7 上运行?
【发布时间】:2011-06-07 22:09:10
【问题描述】:

我已经使用 Oracle 提供的 XCopy 11.2 为 64 位机器安装了 Oracle 客户端(按照自述说明安装了所有内容)。

我正在使用 Visual Studio 2010,项目类型为 ASP.NET 网站。

当我尝试使用上面安装的 Oracle 连接来执行我的 ASP.NET 网站时。它在编译期间给了我来自 web.config 文件的错误。

**

"无法加载文件或程序集 'Oracle.DataAccess,版本=4.112.2.0, 文化=中性, PublicKeyToken=89b483f429c47342' 或 它的依赖项之一。系统 找不到指定的文件”

**

如果我在 IIS 应用程序池中将启用 32 位应用程序的值更改为 True,它会起作用。

但我的要求是让它在具有 64 位 ODP.NET 连接器的 64 位机器上工作,所以我不想将 Enable 32-Bit Applications 的值更改为 True。

所以,如果您能帮我找到答案,将不胜感激。请帮我解决上述错误。

【问题讨论】:

    标签: asp.net windows odp.net


    【解决方案1】:

    解决此问题的最佳方法是在本地使用带有 Visual Studio 的 x86 版本,在带有 IIS 的服务器上使用 x64 版本。 为此,您必须下载两个版本 - 将一个复制到文件夹 lib\x86 中,另一个复制到 lib\x64 中 在此之后,您必须修改项目文件 - Visual Studio 支持条件引用。将以下部分添加到您的项目文件中:

    <PropertyGroup>
         <ReferencesPath Condition=" '$(Platform)' == 'x86' ">..\Lib\x86</ReferencesPath>
         <ReferencesPath Condition=" '$(Platform)' == 'x64' ">..\Lib\x64</ReferencesPath>
    </PropertyGroup>
    

    在此引用之后,odp.net 组件如下所示:

    <Reference ... processorArchitecture=$(Platform)">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>$(ReferencesPath)\Oracle.DataAccess.dll</HintPath>
       <Private>True</Private>
    </Reference>
    

    这样,当您可以在本地构建为 x86 并在服务器 x64 上构建时,将始终引用正确版本的 Oracle.DataAccess.dll。

    或者,如果您只想使用 x64 版本,即使您在本地工作也必须坚持使用 IIS,或者您可以尝试在 x64 模式下运行开源版本的 Cassini (http://cassinidev.codeplex.com) .

    对我来说,最好的方法是参考上述两个版本 - 一段时间以来,这对我团队中的每个人来说都很好。

    【讨论】:

    • 您好,非常感谢您的回复。但我们无法应用此设置,因为我们使用的是 ASP.NET 网站模型而不是 ASP.NET Web 应用程序项目。请让我知道我们是否也可以将这种设置应用于 ASP.NET 网站模型。再次感谢您的回复。
    • 对于网站项目 - 您可以尝试对 web.config 转换进行类似的操作 - 例如在 web.config.debug 中引用 x86 版本和在 web.config.release 中。
    • 中的点是什么意思?
    • 将点替换为 odp.net 程序集的正确信息。它类似于:Include="Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342,
    【解决方案2】:

    您必须安装 64-bit Oracle Data Access Components (ODAC),因为 Oracle 客户端安装不会将 Oracle.DataAccess.dll 注册到程序集中。

    如果您的 oracle 数据访问安装正常,则在您的应用程序池设置中取消选中“启用 32 位应用程序”后,一切都应正常运行。

    如果您仍然遇到相同的错误,则可能是您网站的 bin 文件夹中有 32 位 dll。只需删除它,网站将使用程序集中的 64 位,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 2013-06-22
      • 1970-01-01
      • 2012-04-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      相关资源
      最近更新 更多