尝试将Oracle.DataAccess重定向到Oracle.ManagedDataAccess

时间:2014-06-21 02:46:33

标签: c# .net oracle ado.net

所以我有一个应用程序,其中包含针对Oracle.DataAccess编译的旧库。该应用程序已升级为使用Oracle.ManagedDataAccess,但旧库与Oracle.DataAccess链接。

由于Oracle.DataAccess和Oracle.ManagedDataAccess都具有相同的公钥标记“89b483f429c47342”,我认为我可以进行程序集重定向以解决这个问题,但它没有用。

这是我尝试过的(在使用旧版库的程序集的Web.config文件中):

<dependentAssembly>
  <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.121.1.0" newVersion="4.121.1.0" />
  <publisherPolicy apply="no" />    
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.121.1.0" newVersion="4.121.1.0" />
  <publisherPolicy apply="no" />    
</dependentAssembly>

基本上什么都没发生。我一直收到编译错误说:

  

错误CS0012:类型'Oracle.DataAccess.Client.OracleParameter'是   在未引用的程序集中定义。考虑添加一个   参考汇编'Oracle.DataAccess,Version = 4.112.2.0,   Culture = neutral,PublicKeyToken = 89b483f429c47342'(CS0012)

有问题的代码是采用OracleParameter类型的方法。

为什么这不起作用?我是否误解了装配绑定重定向的用途?

1 个答案:

答案 0 :(得分:0)

您可能需要检查项目文件以获取oracle dll的参考及其版本。我遇到了这样一个问题并且最近转过身来。

<Reference Include="Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86">
  <HintPath>..\..\SharedAssemblies\Oracle.DataAccess.dll</HintPath>
</Reference>

正如您所看到的,我的proj文件中的引用部分从引用dll的位置获得了4.121.2.0,而该位置中存在的物理文件的版本是4.112.2.0。一旦我做了这个改变,我就可以继续前进了。