Oracle.DataAccess不匹配错误

Oracle.DataAccess不匹配错误,oracle,odp.net,Oracle,Odp.net,我为Visual Studio 2012安装了odp.net 32位安装。我设置了对Oracle.DataAccess.dll的引用,我与Oracle的连接似乎正常 在生成项目(.net 4)时,出现以下错误。该项目被设置为构建AnyCPU(我的工作站是64位的,我们最终部署到的服务器是32位的) '正在构建的项目的处理器体系结构“MSIL”与参考Oracle.DataAccess,版本4.112.3.0,区域性=中性,PublicKeyToken=89b483f429c47342,proces

我为Visual Studio 2012安装了odp.net 32位安装。我设置了对Oracle.DataAccess.dll的引用,我与Oracle的连接似乎正常

在生成项目(.net 4)时,出现以下错误。该项目被设置为构建AnyCPU(我的工作站是64位的,我们最终部署到的服务器是32位的)

'正在构建的项目的处理器体系结构“MSIL”与参考Oracle.DataAccess,版本4.112.3.0,区域性=中性,PublicKeyToken=89b483f429c47342,processorArchitecture=x86,“x86”的处理器体系结构不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和引用之间对齐处理器体系结构,或者使用与您的项目

的目标处理器体系结构相匹配的处理器体系结构对引用进行依赖。 这只是一个vs.net警告,但是有没有办法摆脱它

这只是一个vs.net警告,但是有没有办法摆脱它 这个

我相信没有办法解决这个问题,因为您希望在32位机器上部署,而在64位机器上创建。这只是一个警告,告诉你司机可能出了什么问题。如果你现在知道你在做什么,没什么好担心的


您应该期待它-您在64位体系结构上使用32位库。

正如您所说,这只是一个警告。由于ODP.net不是“AnyCPU”,因此警告表示您的依赖关系不会像您自己的应用程序那样适应主机操作系统。只要您的odp.net安装在比特数方面与操作系统相匹配,您就可以了。但是编译器无法做出这样的决定,正试图给你一个提示

我确实发现了一个错误,其中包括一个可能的更改(我假设是proj文件)以禁用错误:

<PropertyGroup>
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
</PropertyGroup>

没有一个
在任何情况下,只要您在服务器上安装的32位odp.net版本与您引用的64位odp.net版本相同(或者正确安装了发布服务器策略以重定向到更高版本),您的“AnyCPU”应用程序就可以在服务器上正常运行。为了消除任何混淆,我通常将“Copy Local”作为“false”的引用。换句话说,我根据特定版本的dll编译,但让它根据GAC解析的内容运行(其中包括大多数odp.net安装都包含的发布者策略)

为了运行/调试32位应用程序,或者使用Visual Studio内部的“Oracle Developer Tools for Visual Studio”附带的集成工具,您还可以在开发人员机器上安装32位odp.net(理想情况下再次安装相同的版本)

综上所述,这里有很多东西。若您的应用程序实际上正在以64位的形式运行(这意味着“这只是一个警告”),那个么它就不会使用您的32位安装。我猜您的机器已经安装了64位版本(多个oracle Home)。

另一个解决方案:

下载并将编译器设置为x86。我100%确信它将清除所有与oracle相关的警告。 使用System.Data.Odbc将命名空间设置为:

然后建立数据库连接