2014-02-03 2 views
1

Я делаю asp.net mvc3, и у меня проблема с ODP.NET, Oracle.DataAccess.Oracle.DataAccess FileNotFoundException

Всякий раз, когда я пытаюсь выполнить свой модульный тест, он выдает исключение FileNotFoundException. Я думал, что я установил и использовал Oracle.DataAccess v4.112.3.0, но мое приложение продолжает искать «Oracle.DataAccess, Version = 4.121.1.0».

Я все еще могу найти «Oracle.DataAccess v4.112.3.0» в своем GAC, и через FusionLog я нашел в моем компьютере machine.config. Поэтому я предполагаю, что существует некоторый конфликт версий 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

Полное сообщение об ошибке полезно. –

+0

сообщение об ошибке отсутствует на английском языке. поэтому я не думаю, что это хорошая идея. Спасибо, в любом случае. – user3110409

ответ

1

Вы всегда можете заставить определенную версию с выполнения перенаправления в web.config (или machine.config), при условии, интерфейс DLL Oracle в разных версиях остался тот же:

<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 точно ссылается и/или дизассемблирует ваши двоичные файлы, чтобы проверить также ссылки библиографических библиотек. (Возможно, что вместо вашего кода какой-то сторонний lib, который вы используете, хочет эту точную версию ODP.NET).

+0

Спасибо за ваш совет. Но я решил эту проблему с удалением 4.112.3, установкой и удалением 4.121.1, а затем переустановить 4.112.3. Я просто прост и неосведомлен, но это сработало. – user3110409