Contexto¿Por qué mi aplicación siempre usa la última versión de GAC en lugar de la versión de referencia?
tengo 2 versiones diferentes de un conjunto instalado en GAC, versión 1.0 y la versión 2.0. Hice una aplicación que hace referencia a 1.0 como una versión específica.
Edición
Cuando ejecuto mi aplicación, será siempre cargar la versión 2.0 mientras que la aplicación hace referencia específicamente a la versión 1.0.
Pregunta
Por qué sucede esto? ¿Cómo puedo forzar a mi aplicación para cargar la versión para la que se ha compilado?
No me parece que esto tenga algo que ver con una redirección de enlace ya que mi aplicación ni siquiera conocía la versión 2.0 cuando la construí y que los metadatos de "Versión específica" de referencia están configurados en verdadero.
Gracias.
Editar:
El conjunto estoy referenciación es en realidad Oracle.DataAccess del paquete ODAC. Noté que otros ensamblajes llamados Policy.x.xxx.Oracle.DataAccess estaban publicados en GAC.
Edición 2:
Después de mirar en la política Oracle.DataAccess me encontré con la configuración que define la redirección de enlace:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="4.112.0.0-4.112.3.0" newVersion="4.112.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
A pesar de que he añadido la redirección de enlace invertí en mi configuración de la aplicación, la política en GAC parece tener la prioridad. he encontrado un MSDN article tratar el tema y sugiere hacer caso omiso de la política con esta configuración:
<publisherPolicy apply="no" />
Pero todavía no funciona ...
Datos 3:
I intenté eliminar la política del GAC y reinicié mi máquina. Finalmente funcionó. No se siente como un desarrollo de una solución confortable, pero esta política me rompió una de mis aplicaciones, lo que significa que desactivar la política es lo correcto en mi caso.
edición final:
Igor me dio la respuesta correcta.Todo lo que tenía que hacer para solucionar estas políticas era utilizar la configuración publisherPolicy
en la sección configruation derecha:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
¿Ha comprobado que no había una política editorial para su ensamblaje con referencia ? –
@IgorKorkhov: Sí, encontré algo llamado Policy.x.xxx.MyAssemblyName en el GAC. No estaba al tanto de tal mecanismo. Edito mi pregunta y puede enviar una respuesta. Gracias. – Ucodia
Pregunta tangencial: ¿Cuál es el problema que hace que quiera usar V1? Yo uso Oracle de vez en cuando, por lo que estoy prevenido :) – Ian