所以我有一个应用程序,其中包含针对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
类型的方法。
为什么这不起作用?我是否误解了装配绑定重定向的用途?
答案 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。一旦我做了这个改变,我就可以继续前进了。