c# - .NET does not use Oracle.DataAccess.dll loaded in AppDomain -


i keep running issue asp.net web app keeps throwing on error on trying load oracle.dataaccess.dll. i'm noticing issue when have both 64-bit , 32-bit oracle.dataaccess.dll installed.

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: 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 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: same bind seen before, , failed hr = 0x80070002. 

the 2.102.2.20 version built projects with.

specific version set false

the runtime version set v2.0.5.0727 (in case matters)

currently, loading newer oracle.dataaccess.dll dynamically system.reflection.assembly.load() appdomain. have iis load 32-bit applications correctly loading x86 assembly. i've confirmed loaded , present before data access layer references oracle.dataaccess.dll.

in addition, reviewed web.config , have assembly bindings target newer version. tried , without bindings , doesn't seem matter.

<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> 

why .net try load older version? thought if have assembly loaded in appdomain, use version?


my gac oracle.dataaccess.dll looks this: windows\assembly windows\microsoft.net\assembly\gac_32

oddly enough, gac_64 folder's entry oracle.dataaccess.dll empty.

i ran console utility test looks registered .dll gac. utility program found these oracle.dataaccess.dll


i did play web.config assembly bindings little , works reason. still don't understand going on. added range , assembly identity info, perhaps whole time, didn't know assembly talking in 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> 

well, don't know if got answer wanted appears assembly bindings being generated web.config may incomplete or wrong based on changes made awhile back.

it appears assembly identity information, .net able reconcile referenced older assembly can "replaced" newer assembly loaded appdomain. otherwise, has version number , ignore assembly binding in web.config. confirm me though effort load newest oracle.dataaccess.dll, assembly bindings decide version used , shouldn't try rid config files of these assembly bindings.

more or less, case want control .dll versioning, use assembly bindings generated off looking @ installed on machine needed , not rely on .net blindly using .dll loaded app domain.


Comments