我有一个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?我不想安装该客户端,因为我将其用于其他项目。
感谢
答案 0 :(得分:12)
我在Oracle site上发现了关于&#34的以下内容:有一个重复的&#39; oracle.manageddataaccess.client&#39;部分已定义。&#34; :
如果您的应用程序是Web应用程序并且添加了上述条目 到web.config和相同的配置 &#34; oracle.manageddataaccess.client&#34;的部分处理程序也存在于 machine.config但&#34;版本&#34;属性值 是不同的,错误信息&#34;有重复 &#39; oracle.manageddataaccess.client&#39;部分定义。&#34;也许 在运行时观察。如果是这样,中的配置节处理程序条目 machine.config for&#34; oracle.manageddataaccess.client&#34;必须从machine.config中删除 为Web应用程序不会遇到 这个错误。但鉴于机器上可能还有其他应用程序 这取决于这个条目 machine.config,此配置节处理程序条目可能需要移动到所有 应用程序的.NET配置文件 那台依赖它的机器。
我希望它有所帮助。
答案 1 :(得分:2)
我在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.3
中有Web.config
,在Version=4.122.1.0
中有machine.config
。
我更新了Version=4.122.1.0
中的版本(替换为oracle.manageddataaccess.client with 4.122.18.3
的{{1}},并解决了问题。
答案 2 :(得分:0)
在我的情况下,我有多个项目。一个是实体框架数据模型,另一个是使用EF模型的WCF服务,使用WCF服务的WPF项目,最后是我的ASP.NET MVC项目,直接使用实体框架数据模型。 我们使用Oracle并拥有一个Nuget包oracle.manageddata。除了我的ASP项目(版本12.1.22)之外,我在所有其他版本中使用了版本12.1.21。降级到其他项目正在使用的内容后,我的Web ASP再次运行。在同一个解决方案中,在各种项目中使用不同的Nuget版本似乎并不是一个好主意。