Je sais que cet article a été publié il y a quelque temps, mais je me suis dit que je devais jeter mes deux cents de toute façon au cas où quelqu'un trébucherait dessus.
Une règle générale est d'utiliser la version PIA dans le développement qui relie avec la version la plus ancienne d'Office que vous envisagez de soutenir. Par conséquent, si vous souhaitez prendre en charge Office 2007 et les versions ultérieures, utilisez la version 12 des assemblys PIA lors du développement.
Ajoutez une référence aux assemblys PIA v12 (soit en téléchargeant les assemblys PIA 2007 en ligne, via VSTO, soit à partir du GAC si vous avez déjà utilisé Office 2007 auparavant). Maintenant, vous pourriez penser "Ok, je référence la v12 dans Visual Studio, cela devrait maintenant fonctionner sur Office 2007". Faux. Puisque vous faites référence à v12 mais que vous avez installé Office 2010, lors de l'assemblage, votre machine dira: "Bien, v12 est demandé, mais nous avons installé la v14 dans le GAC et comme les PIA sont compatibles, nous l'utiliserons". Même si vous lui dites explicitement d'utiliser v12, après l'achèvement d'une compilation, votre machine utilisera v14. Vous pouvez le confirmer via FUSLOG. FUSLOG est un excellent outil à utiliser lorsque vous travaillez avec une liaison d'assemblage. Remarque: Si vous ne voyez rien dans FUSLOG et que vous pensez devoir le faire, effacez tout dans votre historique Internet Explorer et réessayez.
Pour résoudre ce problème, vous devez arrêter ce qu'on appelle 'assembly binding redirection'. Ces PIA ont généralement un fichier de stratégie avec eux dans le GAC. Le but du fichier de stratégie est de rediriger les anciennes versions de PIA vers des versions plus récentes lors de la résolution de l'assembly. Pour voir cela, procédez comme suit:
- 'Touche Windows + R' Appuyez sur pour ouvrir le menu de l'exécution.
- Tapez 'C: \ Windows \ Assembly \ GAC' et appuyez sur Entrée. Remarque: Je cours une machine 32 bits. Vos fichiers PIA seront probablement installés dans un autre emplacement du GAC, par exemple 'C: \ Windows \ Assembly \ GAC_MSIL'.
Une fois dans le GAC, faites défiler vers le bas et recherchez les dossiers des assemblys PIA référencés (par exemple, Microsoft.Office.Interop.Excel). Si vous continuez à défiler, vous devez voir les dossiers commençant par «Policy», puis un numéro, puis le nom de l'assembly PIA (par exemple Policy.12.0.Microsoft.Office.Interop.Excel). C'est le fichier de stratégie qui effectue la redirection de liaison. Ouvrez le fichier de configuration XML dans ce dossier et vous verrez quelque chose de similaire à ce qui suit:
<?xml version="1.0" encoding="UTF-16"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity>
<bindingRedirect oldVersion="12.0.0.0" newVersion="14.0.0.0"></bindingRedirect>
</dependentAssembly>
</assemblyBinding>
</runtime>
Dans l'extrait de code ci-dessus, la balise « bindingRedirect ancienneversion ... » est responsable de la Redirection d'assembly PIA.Si vous commentez ce code comme suit:
<?xml version="1.0" encoding="UTF-16"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity>
<!--<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>-->
</dependentAssembly>
</assemblyBinding>
</runtime>
Ensuite, cette redirection sera ignorée. Je le commente plutôt que de le supprimer simplement parce que le fichier sert un bon but, mais pas lors du développement pour les anciennes versions d'Office. Effectuez cette opération sur chaque fichier de stratégie PIA dont vous avez besoin et votre machine de développement arrêtera la redirection.
J'espère que cela répond à votre question!
Problème? *Quel problème? –
Que se passe-t-il si vous cliquez sur chaque assemblage de bureau et que vous activez "Intégrer les types d'interopérabilité"? Je pense que cela enlève le besoin de se préoccuper de l'emplacement des fichiers PIA ou de la version utilisée. –