2010-08-16 20 views
23

estoy tratando de configurar una redirección de enlace de ensamblado, utilizando la siguiente app.config:Asamblea redirección de enlace no funciona

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.AnalysisServices" 
          PublicKeyToken="89845dcd8080cc91" /> 
     <bindingRedirect oldVersion="10.0.0.0" 
         newVersion="9.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

estoy ejecutando el programa en una máquina con la versión 9.0.242.0 en el GAC, con el token de clave pública especificado. Sin embargo, el CLR no parece estar intentando redirigir el enlace para usar esa versión.

Aquí es lo que me pasa en Fuslogvw.exe:

LOG: This bind starts in default load context. LOG: Using application configuration file: \Debug\AssemblyRedirectPOC.exe.Config LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. LOG: Post-policy reference: Microsoft.AnalysisServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.EXE. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.EXE. LOG: All probing URLs attempted and failed.

Cuando traté de poner la dll versión 9.0.242.0 en la trayectoria de la sonda, consigo este lugar:

LOG: Assembly download was successful. Attempting setup of file: \Debug\Microsoft.AnalysisServices.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: Microsoft.AnalysisServices, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Tenga en cuenta que también traté de cambiar el redireccionamiento para usar "9.0.242.0" en lugar de "9.0.0.0" en el app.config y eso no funcionó, aunque no creo que deba hacer ninguna diferencia.

Por lo que entiendo, el objetivo de redirigir un enlace es utilizar una versión que no coincida con la que se creó el programa. ¿Me estoy perdiendo algo por completo aquí? Es lo que intento hacer, y si es así, ¿alguna idea de por qué no está funcionando?

Cheers, Adam

Respuesta

17

Cualquier error tipográfico en XML de configuración puede ser una causa. Loader simplemente no puede ver tu configuración. También tuve una hora de dolor de cabeza hasta que me di cuenta de que el error fue de carácter "=" en lugar de "-" en el nombre de esquema:

<assemblyBinding xmlns="urn:schemas=microsoft-com:asm.v1"> 

Sólo echa cuidadosamente todos los nombres de atributos y valores. Supongo "PublicKeyToken" debe ser "publicKeyToken"

esto debería funcionar:

<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Microsoft.AnalysisServices" publicKeyToken="89845dcd8080cc91" /> 
      <bindingRedirect oldVersion="10.0.0.0" newVersion="9.0.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
</configuration> 
+1

sumando 'xmlns =" ​​urn: schemas = microsoft-com: asm.v1 "' resolvió el problema para mí. ¡Gracias! – trailmax

+17

El incorrecto (con an = en lugar de -) * funcionó * para usted? – Zack

7

me encontré con redirección de unión no funcione debido a un espacio de nombres que faltan en el elemento assemblyBinding.

correcta

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="TIBCO.Rendezvous" publicKeyToken="1a696d1f90f6158a"/> 
    <bindingRedirect oldVersion="1.0.0.0-1.0.3191.28836" newVersion="1.0.3191.28836"/> 
    </dependentAssembly> 

incorrecta

Nota faltante: xmlns = "urn: schemas-microsoft-com: asm.v1"

<assemblyBinding> 
    <dependentAssembly> 
    <assemblyIdentity name="TIBCO.Rendezvous" publicKeyToken="1a696d1f90f6158a"/> 
    <bindingRedirect oldVersion="1.0.0.0-1.0.3191.28836" newVersion="1.0.3191.28836"/> 
    </dependentAssembly> 

+1

Sus ejemplos de configuración parecen idénticos. – MisterMetaphor

+0

Sí, lo siento actualizado el ejemplo –

2

en mi caso, tuve que quitar el

appliesTo="v2.0.05727" 

de

<assemblyBinding appliesTo="v2.0.05727" xmlns="urn:schemas-microsoft-com:asm.v1"> 
3

Mi problema fue resuelto cuando me cambiaron la configuración de redirección de unión a machine.config archivo.

+1

En movimiento bindingredirects a Machine.Config resolvió mi problema – Ziggler

1

Las políticas de contraseña excéntrica también pueden hacer que se ignoren los elementos de unión de ensamblaje en la configuración. Caracteres como '&' y '^' aparentemente no están permitidos en un archivo de configuración. Las herramientas XML en Notepad ++ me revelaron esto después de algunas horas de juguetear con el Visor de registro vinculante de ensamblaje.

3

Tuve un problema similar donde mover bindingredirects a Machine.Config era lo único que funcionaba. Esa no era la solución ideal en mi aplicación winform porque distribuyo mi aplicación a los clientes.

Solución:

Hacer archivo .config seguro está en el directorio donde se ejecuta la aplicación de. p.ej. si su AppName es "MyApp", los redireccionamientos deben estar en el archivo "MyApp.exe.Config" en el directorio de la aplicación.

Tuve que hacer esto incluso si el código que usa dlls de terceros está en dll diferente en mi solución y agregar .dll.config no me ayudó.

+0

Mover bindingredirects a Machine.Config resolvió mi problema. – Ziggler

4

Asegúrese de que su etiqueta <configuration> tenga sin espacio de nombre, atributo. De lo contrario, se ignorará cualquier etiqueta <assemblyBinding>.

incorrecto:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

Derecha:

<configuration> 

(desde https://stackoverflow.com/a/12011221/150370)

0

Si te sirve de ayuda a nadie, me encontré con esto porque no puse la versión completa en para newVersion. es decir, que tenía newVersion="3.0.1" en lugar de newVersion="3.0.1.0"

0

Comprobar si el error La redirección de unión explícita sobre xxx cultural = punto muerto PublicKeyToken = xxx" en conflicto con una unión autogenerado redirigen

aparece en la ventana de salida (que ganó 't aparece en la ventana de error)

Cuestiones relacionadas