У меня проблема с тем, что мое веб-приложение ASP.NET продолжает бросать ошибку при попытке загрузить Oracle.DataAccess.dll. Я замечаю эту проблему, когда у меня установлена и 64-разрядная, и 32-разрядная Oracle.DataAccess.dll..NET не использует Oracle.DataAccess.dll, загруженный в AppDomain
LOG: DisplayName = Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342 (Fully-specified)
LOG: Appbase = file:///C:/Dev/repository/trunk/myapp/
LOG: Initial PrivatePath = C:\Dev\repository\trunk\myapp\bin
Calling assembly : DataAccess.Oracle, Version=15.0.0.26242, Culture=neutral, PublicKeyToken=null.
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Dev\repository\trunk\myapp\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
LOG: The same bind was seen before, and was failed with hr = 0x80070002.
2.102.2.20 версия, с которой я построил свои проекты.
Конкретная версия устанавливается в ложном
исполняющая среда Version установлена в v2.0.5.0727 (в случае, если имеет значение)
В настоящее время я загружая новую Oracle.DataAccess. dll динамически System.Reflection.Assembly.Load() в AppDomain. У меня есть IIS для загрузки 32-разрядных приложений, поэтому он правильно загружает сборку x86. Я подтвердил, что он загружен и присутствует до того, как мой уровень доступа к данным обращается к Oracle.DataAccess.dll.
Кроме того, я просмотрел свой web.config, и у меня есть привязки для привязки к более новой версии. Пробовал с привязками и без них, и это, похоже, не имеет значения.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<bindingRedirect oldVersion="2.102.2.20" newVersion="2.112.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<bindingRedirect oldVersion="2.102.2.20" newVersion="4.112.3.0" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
Почему .NET пытается загрузить более старую версию? Я думал, что если у меня есть сборка, загруженная в AppDomain, она просто будет использовать эту версию?
Мой GAC для Oracle.DataAccess.dll выглядит следующим образом:
Как ни странно, запись моей GAC_64 папки для Oracle.DataAccess.dll пуст.
Я запустил консольный утилитный тест, который ищет зарегистрированный .dll - это GAC.
Я играю с web.config монтажными креплениями немного и теперь он работает по какой-то причине. Все еще не понимаю, что происходит. Я добавил диапазон и информацию об идентификационной информации, возможно, все это время, она просто не знала, какую сборку я рассказывал в web.config.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="2.102.2.20-2.102.9999.9999" newVersion="2.112.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="2.102.2.20-2.102.9999.9999" newVersion="4.112.3.0" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
Я просмотрел [docs] (https://msdn.microsoft.com/en-us/library/yx7xezcf (v = vs.110) .aspx # step1), я просто не понимаю, почему первый шаг определения версии сборки, похоже, игнорирует файл web.config. – Harbie
Поскольку более старый тип зарегистрирован в GAC, который имеет приоритет над одним в BIN. Я могу даже рассказать вам, что происходит - у вас установлен клиент ora, и есть папка odp.net, в которой у вас есть эта DLL, и это reg в GAC при установке, я ставлю –
Я действительно смотрел в папке ODP.NET, но более старая версия не зарегистрирована в моем GAC, добавлена дополнительная информация о состоянии моего GAC выше. В bin нет файла Oracle.DataAccess.dll, который требуется установить для запуска веб-приложения. – Harbie