11

我有一个 VS 2012 Web 项目。我安装了 ODP.NET,因为我们是 Oracle Workshop。我继承了一个使用 Oracle.ManagedAccess.Data 和 EF 的项目。

在 VS 2012 中运行项目时,出现以下错误:

There is a duplicate 'oracle.manageddataaccess.client' section defined..

解决方案是禁用 web.config 中的以下行

<!--<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />-->

这很好。该项目已编译,但在执行一个简单的命令(例如在必须读取数据库的地方取回密码)时,又出现了另一个错误:

System.Data.ConstraintException: Column 'InvariantName' is constrained to be unique.  Value 'Oracle.ManagedDataAccess.Client' is already present.

现在我知道错误是由 ODP.NET 触发的,并且它存在于 GAC 中,因此会出现双重错误报告。

我应该注释掉另一行还是有办法短暂禁用 ODP.NET?我不想安装该客户端,因为我将它用于其他项目。

谢谢

4

3 回答 3

20

我在Oracle 网站上找到了以下关于“定义了重复的 'oracle.manageddataaccess.client' 部分”的内容。

如果您的应用程序是 Web 应用程序,并且上述条目已添加到 web.config,并且 machine.config 中也存在“oracle.manageddataaccess.client”的相同配置节处理程序,但“版本”属性值不同,则会出现错误“定义了重复的 'oracle.manageddataaccess.client' 部分”的消息。可以在运行时观察到。如果是这样,则必须从 machine.config 中删除 machine.config 中“oracle.manageddataaccess.client”的配置部分处理程序条目,以便 Web 应用程序不会遇到此错误. 但是考虑到机器上可能有其他应用程序依赖于 machine.config 中的这个条目,这个配置节处理程序条目可能需要移动到该机器上依赖它的所有应用程序的 .NET 配置文件中。

我希望它有所帮助。

于 2015-12-17T17:03:10.753 回答
15

对于 ASP.Net MVC 项目,我遇到了同样的错误。我发现项目oracle.manageddataaccess.client中的版本不匹配Web.config,并且machine.config

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config, and 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config. 

Version=4.122.18.3Web.configVersion=4.122.1.0machine.config.

我更新了 中的版本(替换Version=4.122.1.0oracle.manageddataaccess.client with 4.122.18.3),machine.config问题解决了。

于 2018-11-20T10:29:54.233 回答
0

就我而言,我有多个项目。一个是实体框架数据模型,另一个是使用 EF 模型的 WCF 服务,一个使用 WCF 服务的 WPF 项目,最后是我的 ASP.NET MVC 项目,直接使用实体框架数据模型。我们使用 Oracle 并有一个 Nuget 包 oracle.manageddata。除了我的 ASP 项目(其版本为 12.1.22)之外,我在所有其他项目中都使用了 12.1.21 版本。降级到其他项目正在使用的内容后,我的 Web ASP 再次运行。在同一个解决方案中的不同项目中使用不同的 Nuget 版本似乎不是一个好主意。

于 2018-02-16T08:00:56.587 回答