J'essaie de configurer une redirection de liaison d'assembly à l'aide du fichier app.config suivant:
<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>
J'exécute le programme sur une machine avec la version 9.0.242.0 du 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 trouve 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 version 9.0.242.0 dll dans le chemin de la sonde, je reçois plutôt 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 app.config et cela n'a pas fonctionné, bien que je ne pense pas que cela devrait faire une différence.
De ce que je comprends, l’intérêt de rediriger 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 ce que j'essaie de faire est possible et, le cas échéant, pourquoi ne fonctionne-t-il pas?
À la vôtre, Adam
Toute faute de frappe dans la configuration XML peut être une cause. Loader ne peut tout simplement pas voir votre configuration . J'ai également eu une heure de migraine jusqu'à ce que je réalise que l'erreur était dans le caractère "=" au lieu de "-" dans le nom du schéma:
<assemblyBinding xmlns="urn:schemas=Microsoft-com:asm.v1">
Il suffit de vérifier soigneusement tous les noms et valeurs d'attributs. 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>
Assurez-vous que votre balise <configuration>
possède l'attribut no namespace. Sinon, toute balise <assemblyBinding>
sera ignorée.
Faux:
<configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0">
Droite:
<configuration>
J'ai rencontré liaison redirect do 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 manquant: 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>
dans mon cas, je devais enlever le
appliesTo="v2.0.05727"
de
<assemblyBinding appliesTo="v2.0.05727" xmlns="urn:schemas-Microsoft-com:asm.v1">
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, car je distribue mon application aux clients.
Solution:
Assurez-vous que le fichier .config se trouve dans le répertoire où votre application est exécutée. par exemple. Si votre AppName est "MyApp", les redirections doivent figurer dans le fichier "MyApp.exe.Config" du répertoire de l'application.
Je devais le faire même si le code qui utilise des dll tierces se trouve dans différentes dll de ma solution et que l'ajout de .dll.config n'a pas aidé.
Mon problème a été résolu lorsque j'ai déplacé la configuration de redirection de liaison dans le fichier machine.config.
Les politiques de mot de passe excentriques peuvent également entraîner l'ignorance des éléments assemblyBinding de la configuration. Des caractères tels que '&' et '^' ne sont apparemment pas autorisés dans un fichier de configuration. Les outils XML de Notepad ++ me l'ont révélé après quelques heures de manipulation de la visionneuse de journal d'assemblage.
Si cela peut aider quelqu'un, je me suis heurté à cela parce que je n'avais pas mis la version complète dans newVersion. c'est-à-dire que j'avais newVersion="3.0.1"
au lieu de newVersion="3.0.1.0"
Si vous installez Visual Studio 2017 sans la partie outils de développement ASP.NET, il continuera à charger un projet Web, à le compiler et à le construire. Il ne fera que donner des avertissements sur les versions du paquet NuGet, car il ne sait pas quoi faire avec le fichier web.config et ne peut donc pas voir les redirections de liaison.
Réparer l’installation a résolu mon problème, mais il a fallu une éternité pour le résoudre.
Merci beaucoup pour les réponses, en particulier celle de Shrike. J'avais une application qui fonctionnait en développement, mais pas dans la version déployée. Quand j'ai regardé de plus près, j'avais ceci en production, ce qui ne correspondait pas au développement:
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly xmlns="">
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
dependAssembly xmlns = "" était le coupable. Dès que j'ai comparé la mienne à votre réponse et corrigé le problème, cela fonctionnait. Merci pour l'aide
Vérifiez si l'erreur La redirection de liaison explicite sur xxx, Culture = neutre, PublicKeyToken = xxx "est en conflit avec une redirection de liaison générée automatiquement
apparaît dans la fenêtre de sortie (il n'apparaîtra pas dans la fenêtre d'erreur)