Mon projet Visual Studio 2008 fait référence à deux assemblages (externes) (A + B) référençant tous les deux le même troisième assemblage (C). Cependant, l'assembly A s'attend à ce que l'assembly C ait une clé publique différente de ce que l'assembly B s'attend à avoir.Référence deux assemblages égaux, seules les clés publiques diffèrent
Voici un exemple de l'exception évidente:
Impossible de charger le fichier ou l'assembly 'Newtonsoft.Json, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 9ad232b50c3e6444' ou une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)
Ofcourse, je ne serais pas en mesure de mettre les deux versions de C (uniquement différents par clé publique) dans le même répertoire, que leurs noms sont égaux. Deuxièmement, j'ai découvert que l'utilisation de la liaison d'assemblage à partir du fichier de configuration permet uniquement le mappage de version, et non le mappage de clé publique.
J'ai également essayé de placer l'un des assemblages C dans un répertoire séparé et de configurer le CLR pour qu'il recherche dans ce répertoire lors du chargement des assemblages. Je ne pouvais pas le faire fonctionner malheureusement. Je suis conscient que la recompilation d'une des bibliothèques externes (l'une d'entre elles est en open source) résoudrait ce problème mais je ne veux pas ajouter ce fardeau à mon plan de maintenance si ce n'est pas absolument nécessaire. Donc, ma question est: comment puis-je faire référence aux deux 'versions' de l'ensemble C, qui ne diffèrent que par la clé publique?
MISE À JOUR
je suis tombé sur this answer à une question connexe, en fournissant une solution intéressante en utilisant ILMerge. Je ne l'ai pas encore vérifié mais il peut être utile à tous ceux qui luttent avec ce problème.
J'ai eu le même problème et [ceci] (http://stackoverflow.com/questions/2460542/using-different-versions-of-the-same-assembly-in-the-same-folder/2461746#2461746) est comment je l'ai résolu. –