9

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

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

'正在构建的项目的处理器架构“MSIL”与参考 Oracle.DataAcess 的处理器架构不匹配,版本 4.112.3.0,Culture=neutral,PublicKeyToken=89b483f429c47342,processorArchitecture=x86,“x86”。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器架构,以使项目与参考之间的处理器架构保持一致,或者使用与项目的目标处理器架构相匹配的处理器架构来依赖参考。

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

4

3 回答 3

17

就像你说的,这只是一个警告。因为 ODP.net 不是“AnyCPU”,警告表明您有一个依赖项,它不会像您自己的应用程序那样适应主机操作系统。只要您的 odp.net 安装在位方面与操作系统匹配,就可以了。但是编译器无法做出这个决定,并试图给你一个提示。

我确实找到了一篇关于此的连接文章,其中包括可能的更改(我假设 proj 文件)以禁用错误:

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

在任何情况下,只要您在服务器上安装的 32 位 odp.net 与您引用的 64 位 odp.net 版本相同(或发布者策略已正确安装到重定向到更高版本)。为了消除任何混淆,我通常将“复制本地”设置为“假”的引用。换句话说,我针对特定版本的 dll 进行编译,但让它针对它从 GAC 解析的内容运行(其中包括大多数 odp.net 安装包含的发布者策略)。

您还可以在您的开发机器上安装 32 位 odp.net(最好再次使用相同的版本),以便运行/调试 32 位应用程序或使用 Visual 内部“随 Oracle Developer Tools for Visual Studio”提供的集成工具工作室。

话虽如此,这里还有很多东西。如果您的应用程序实际上正在运行(暗示“它只是一个警告”),作为 64 位,而不是使用您的 32 位安装。我猜你的机器已经安装了 64 位版本(多个 oracle home)。

于 2013-02-01T18:08:34.047 回答
1

另一种解决方案:

下载ODAC 11.2 Release 5 (11.2.0.3.20)并将编译器设置为 x86。我 100% 确定它会清除所有与 oracle 相关的警告。将命名空间设置为:using System.Data.Odbc;

然后建立数据库连接。

于 2014-08-26T12:49:15.990 回答
0

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

我相信没有办法摆脱它,因为您想在 32 位机器上部署并在 64 位上创建。这只是一个警告,通知您驱动程序可能有问题。如果您现在正在做什么,则无需担心。

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

于 2013-02-01T09:16:05.373 回答