如何在64位Windows 7机器上使ODP.NET 4.0(64位)正常工作?

3

我已经按照Oracle提供的XCopy 11.2安装说明,在64位机器上安装了Oracle Client(安装了所有内容)。

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

当我尝试使用上述安装的Oracle连接执行我的ASP.NET网站时,它在编译时从web.config文件中给出了错误。

**

"无法加载文件或程序集'Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'或它的某个依赖项。系统找不到指定的文件"

**

如果我在IIS应用程序池中将“启用32位应用程序”设置为True,则可以正常工作。

但我的要求是在64位机器上使用64位ODP.NET连接器运行它,因此我不想将“启用32位应用程序”设置为True。

所以,如果您能够帮助我找到答案,那将非常感激。请帮我修复上述错误。

2个回答

4

处理这个问题的最佳方式是在本地使用带有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网站模型。再次感谢您的回复。 - user788312
对于一个网站项目,你可以尝试使用 web.config 转换来实现类似的功能。例如,在 web.config.debug 中引用 x86 版本,在 web.config.release 中引用其他版本。 - devdimi
"<Reference ... processorArchitecture=$(Platform)"> 中的点号代表什么意思?" - Niels Ziegler
用正确的信息替换odp.net程序集中的点。它应该是这样的:Include="Oracle.DataAccess,Version=4.112.2.0,Culture=neutral,PublicKeyToken=89b483f429c47342, - devdimi

1

由于Oracle客户端安装程序没有将Oracle.DataAccess.dll注册到程序集中,因此您必须安装64位Oracle数据访问组件(ODAC)

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

如果仍然出现相同的错误,则可能在网站的bin文件夹中有一个32位dll。只需将其删除,网站将使用程序集中的64位dll,然后就应该可以正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接