2012-05-22 21 views
8

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

¿Ha comprobado que no había una política editorial para su ensamblaje con referencia ? –

+0

@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

+0

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

Respuesta

7

Después de editar su pregunta se hace evidente que este es el archivo de política que afecta enlace de ensamblado.

En caso de Oracle que hay un archivo llamado Policy.XYOracle.DataAccess.config con el contenido similar a esto:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/> 
      <bindingRedirect oldVersion="10.1.0.000-10.2.0.100" newVersion="10.2.0.100"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

La política es instalado por el instalador de Oracle y redirige Oracle.DataAccess.dll a la última versión, como Oracle cree que la biblioteca es compatible con versiones anteriores.

EDIT: Si no desea que la política editorial que ha de aplicarse para un conjunto particular,, poner el elemento en el elemento:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="myAssembly" publicKeyToken="..." culture="en-us" /> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> 
      <publisherPolicy apply="no" /> 
    </dependentAssembly> 
</assemblyBinding> 
+0

Intenté con '' pero no resolvió el problema. Leí [aquí] (http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx) que podría usar '' para ignorar las políticas pero sigue teniendo el mismo problema. .. – Ucodia

+0

@Ucodia: eso es extraño. ¿Estás haciendo referencia a v4.112.3.0 en tu aplicación? Tal vez deberías intentar incluir una variedad de versiones (por ejemplo, '0.0.0.0-4.65535.65535.65535') para ver si esto va a funcionar. –

+0

Específicamente, hago referencia a 4.112.2.1. Actualicé mi pregunta con algunos hallazgos nuevos. Parece que la política publicada en GAC anula cualquier configuración de aplicación. – Ucodia

Cuestiones relacionadas