我正在做asp.net mvc3,我遇到了ODP.NET,Oracle.DataAccess的问题。
每当我尝试进行单元测试时,都会抛出FileNotFoundException。 我以为我已经安装并使用了Oracle.DataAccess v4.112.3.0,但我的应用程序一直在寻找'Oracle.DataAccess,Version = 4.121.1.0'。
我仍然可以在我的GAC中找到'Oracle.DataAccess v4.112.3.0'并通过我在machine.config中找到的下面的FusionLog。所以我猜ODP.NET存在一些版本冲突。
<system.data>
<DbProviderFactories>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
所以,我试图修改machine.config中的版本,但它没有用。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
您可以随时在web.config(或machine.config)中强制使用运行时重定向的特定版本,前提是Oracle dll的各个版本的界面保持不变:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="4.121.1.0" newVersion="4.112.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
根据我的经验,这个技巧在从10.1重定向到任何更新的版本时起作用,但是一旦我们在尝试向后重定向时遇到了神秘错误(请参阅this),因此我建议您更好地找到确切的原因为什么会发生这种情况 - 查看你的* .csproj,确切地引用了Oracle.DataAccess和/或反汇编你的二进制文件以检查引用库的引用。 (有可能你使用的某些第三方库而不是你的代码需要这个确切版本的ODP.NET。)