La version 9i de l'ODP for .Net installe la DLL Oracle.DataAccess.dll en version 9.2.0.700 dans le GAC.
Les deux versions de l'assembly Oracle.DataAccess.dll étant dans le GAC,
comment passer d'une version à une autre sans tout recompiler ?
En fait, vous n'avez rien a faire! Enfin, il faut quand même installer ODP for .Net 10g en spécifiant
bien que vous voulez installer l'assembly pour le runtime 1x. Mais c'est tout!
En effet les assembly compilés pour utiliser Oracle.DataAccess.dll en version 9.2.0.700 utiliseront automatiquement la version 1.102.2.20 (même si la version 9i est encore dans le GAC).
static void Main(string[] args) { Assembly myDll = Assembly.GetAssembly(typeof(Oracle.DataAccess.Client.OracleDbType)); Console.WriteLine(myDll.FullName); Console.WriteLine(myDll.Location); }
On obtient le résultat suivant :
Pas besoin de fouiller tout le fichier machine.config pour trouver un "bindingRedirect" concernant Oracle.DataAccess.dll... il n'y en a pas.
Il faut donc chercher ailleurs...
*** Entrée du journal Binder d'assembly (08/08/2011 @ 17:47:14) ***
L'opération a réussi.
Résultat de liaison : hr = 0x0. Opération réussie.
Gestionnaire des assemblys chargé à partir de : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Exécution sous l'exécutable D:\Projets\Tests\MyDllUse\MyDllUse\bin\Release\MyDllUse.exe
--- Un journal des erreurs détaillé suit.
=== Informations d'état de liaison préalable ===
JRN : utilisateur = EMEA\extguean
JRN : DisplayName = Oracle.DataAccess, Version=9.2.0.700, Culture=neutral, PublicKeyToken=89b483f429c47342
(Fully-specified)
JRN : Appbase = file:///D:/Projets/Tests/MyDllUse/MyDllUse/bin/Release/
JRN : PrivatePath initial = NULL
JRN : base dynamique = NULL
JRN : base de cache = NULL
JRN : AppName = MyDllUse.exe
Assembly appelant : MyDllUse, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
JRN : cette liaison démarre dans le contexte de chargement de default.
JRN : aucun fichier de configuration de l'application n'a été trouvé.
JRN : utilisation du fichier de configuration de l'ordinateur à partir de
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
JRN : le fichier de stratégie d'éditeur a été trouvé à
C:\WINDOWS\assembly\GAC\Policy.9.2.Oracle.DataAccess\1.102.2.20__89b483f429c47342\Policy.9.2.Oracle.DataAccess.config.
JRN : la redirection du fichier de stratégie d'éditeur a été trouvée : 9.2.0.700 redirigé vers 1.102.2.20.
JRN : ProcessorArchitecture est verrouillé à Legacy.
JRN : référence post-stratégie : Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
JRN : un assembly a été trouvé en recherchant dans le GAC.
JRN : la liaison a réussi. Elle retourne un assembly à partir de
C:\WINDOWS\assembly\GAC\Oracle.DataAccess\1.102.2.20__89b483f429c47342\Oracle.DataAccess.dll.
JRN : l'assembly est chargé dans le contexte de chargement default.
Avec le "DisplayName", on peut voir que la version demandée est bien la version 9.2.0.700.
Mais on aperçoit une autre ligne intéressante : "la redirection du fichier de stratégie d'éditeur a été trouvée".
En effet Oracle utilise une stratégie d'éditeur aussi appelé "Publisher Policy"
qui redirige tous les appels de la DLL 9.2.0.700 vers sa version 1.102.2.20.
Si on jette un coup d'oeil au GAC on trouve le dossier contenant cette stratégie :
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="9.2.0.000-9.2.0.999" newVersion="1.102.2.20"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Si vous avez des remarques ou des commentaires, n'hésitez pas à me contacter sur sylvain114.free.fr.