2010-08-16 5 views
23

Je suis en train de mettre en place une redirection assemblage de liaison, en utilisant la app.config suivante:redirect liant l'Assemblée ne fonctionne pas

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

Je l'exécution du programme sur une machine avec la version 9.0.242.0 en le GAC, avec le jeton de clé publique spécifié. Le CLR ne semble même pas essayer de rediriger la liaison pour utiliser cette version.

Voici ce que je reçois dans 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.

Quand j'ai essayé de mettre la dll version 9.0.242.0 dans la trajectoire de la sonde, je reçois ceci:

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.

Notez que j'ai également essayé de changer la redirection pour utiliser "9.0.242.0" au lieu de "9.0.0.0" dans le fichier app.config et cela n'a pas fonctionné, bien que je ne pense pas que cela devrait faire la moindre différence. D'après ce que je comprends le but de la redirection d'une liaison est d'utiliser une version qui ne correspond pas à celle avec laquelle le programme a été construit. Est-ce que je manque complètement quelque chose ici? Est ce que j'essaye de faire possible, et si oui, aucune idée de pourquoi cela ne fonctionne pas?

Cheers, Adam

Répondre

17

Toute erreur typographique dans xml de configuration peut être une cause. Loader ne peut tout simplement pas voir votre configuration. Je aussi eu une heure de maux de tête jusqu'à ce que je me rends compte que l'erreur était de caractère « = » au lieu de « - » dans le nom du schéma:

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

juste vérifier soigneusement tous les attributs noms et valeurs. Je suppose que « PublicKeyToken » devrait être « publicKeyToken »

Cela devrait fonctionner:

<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

ajouter 'xmlns =" ​​urn: schémas = microsoft-com: asm.v1 "' a résolu le problème pour moi Merci – trailmax

+17

Le mauvais (avec un = au lieu de -) * travaillé * pour vous? – Zack

7

je rencontrais redirect liaison ne travaillant en raison d'un espace de noms manquant sur l'élément assemblyBinding.

Correct

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

incorrect

Remarque manquante: 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

Vos exemples de configuration semblent identiques – MisterMetaphor

+0

Oui, désolé mis à jour l'exemple –

2

dans mon cas, je devais retirer le

appliesTo="v2.0.05727" 

de

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

Mon problème a été résolu lorsque je me suis déplacé de liaison configuration de redirection vers un fichier machine.config.

+1

Déménagement bindredirects to Machine.Config a résolu mon problème – Ziggler

1

Les stratégies de mot de passe excentrique peuvent également entraîner l'ignorance des éléments assemblyBinding dans la configuration. Les caractères tels que '&' et '^' ne sont apparemment pas autorisés dans un fichier de configuration. Les outils XML dans Notepad ++ me l'ont révélé après quelques heures de manipulation de l'Afficheur du journal de liaison d'assemblage.

3

J'ai eu un problème similaire où le déplacement de bindingredirects vers Machine.Config était la seule chose qui fonctionnait. Ce n'était pas la solution idéale dans mon application winform parce que je distribue mon application aux clients.

Solution:

Assurez-vous que le fichier .config est dans le répertoire où l'application est en cours d'exécution à partir. par exemple. Si votre AppName est "MyApp" alors les redirections doivent être dans le fichier "MyApp.exe.Config" dans le répertoire de l'application.

Je devais le faire même si le code qui utilise des DLLs tiers est dans dll différente dans ma solution et l'ajout de .dll.config n'a pas aidé.

+0

Le déplacement de bindredirects vers Machine.Config a résolu mon problème. – Ziggler

4

Assurez-vous que votre tag <configuration> a sans attribut d'espace de noms. Sinon, toute étiquette <assemblyBinding> sera ignorée.

Mauvais:

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

droit:

<configuration> 

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

0

Si c'est une aide à tout le monde, je suis tombé parce que je ne mettait pas la version complète dans la nouvelle version. à-dire, j'ai eu newVersion="3.0.1" au lieu de newVersion="3.0.1.0"

0

Vérifiez si l'erreur La redirection de liaison explicite sur xxx, Culture = neutral, PublicKeyToken = xxx » en conflit avec un liant autogénérés redirigent

apparaît dans la fenêtre de sortie (il a gagné n'apparaît pas dans la fenêtre d'erreur)

Questions connexes