我最近用Visual Studio 2013安装了一台Windows 8.1 64位计算机(可能是32位,至少它安装在Program Files(x86)中)。我还安装了Oracle 11.2.0.1 64位客户端和用于.NET.的Oracle数据提供程序
当我执行gautil/l | findstr Oracle.DataAccess时,我会得到四个条目,包括以下条目:
Oracle.DataAccess, Version=2.112.1.0, ..., processorArchitecture=AMD64
但是,在尝试添加程序集时,我在任何列表中都找不到Oracle.DataAccess(不过Oracle.Web位于"程序集"->"扩展"下)。
我是否必须安装32位Oracle客户端(或简单地安装32位ODP.NET),因为Visual Studio是32位的?如果是这样,该软件是否能够在64位系统上运行,该系统具有64位应用程序和64位Oracle客户端(具有64位ODP.NET)?
是的,Visual Studio是一个32位的应用程序。
它取决于编译目标(x86
、x64
或AnyCPU
)运行/调试应用程序所需的Oracle客户端,而与Visual Studio的体系结构无关。
AnyCPU
将在64位Windows上以64位运行(很可能是这种情况)
Oracle.DataAccess
未显示,因为它是64位程序集,但您的Visual Studio是32位程序集。
有几种解决方案:
-
在
Add References
中,使用Browse
部分并手动定位Oracle.DataAccess.dll
。通常,您会在文件夹%ORACLE_HOME%odp.netbin2.x
或%ORACLE_HOME%odp.netbin4
中找到它 -
分别打开
*.csproj
。带有文本编辑器的*.vbproj
文件,并手动添加引用,即在元素<ItemGroup>
:下添加这样的行<Reference Include="Oracle.DataAccess"> <SpecificVersion>False</SpecificVersion> <Private>False</Private> </Reference>
注意:不需要像
Version=...
或processorArchitecture=...
这样的属性。您的应用程序将根据所选的体系结构和目标.NET框架加载正确的Oracle.DataAccess.dll
(前提是它安装正确,也安装在您的目标机器上) -
在您的计算机上同时安装x86和x64 Oracle客户端。以下是如何做到这一点的说明:堆栈溢出-安装Oracle x86和x64
-
使用Oracle的ODP.NET托管驱动程序。您可以从这里下载:64位Oracle数据访问组件(ODAC)下载这也适用于32位应用程序。
-
打开注册表编辑器,检查RegKey
HKLMSOFTWAREWow6432NodeMicrosoft.NETFrameworkv2.0.50727AssemblyFoldersExODP.NET
是否分别为。CCD_ 18存在。两个RegKeys都只包含(Default)
值和Oracle.DataAccess.dll
的位置。示例:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv2.0.50727AssemblyFoldersExODP.Net] @="c:\oracle\product\11.2\Client_x86\odp.net\bin\2.x" [HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv4.0.30319AssemblyFoldersExODP.Net] @="c:\oracle\product\11.2\Client_x86\odp.net\bin\4"
-
在编译选项中检查目标框架。当您安装了ODP.NET 4.x版本时,必须选择目标
.NET Framework 4
或更高版本,才能在参考列表中看到ODP.NET条目。