Chargement de plusieurs versions du même assemblage
Je suis en train de travailler avec un tiers de l'assemblée et, malheureusement, j'ai maintenant besoin de charger leurs plus récents et une version précédente dans mon projet à exécution, je peux décider lequel de charge. Je n'ai besoin de l'un, mais pas les deux.
Avec cela à l'esprit, je suis aussi dépendant sur les types fournis par les composants donc je ne peux pas les charger à partir de la réflexion et de la requête à chaque fois pour la méthode/événements/interfaces que je veux utiliser. J'ai vu une mention de la manipulation via AppDomain
s mais je ne suis pas sûr de savoir comment procéder.
Serait le processus dans le de code par rapport à une version du composant et puis au moment de l'exécution (à l'aide de la AppDomain
) swap dans la bonne DLL je veux être consommé? Donc je ne serait de la manipulation de ce au démarrage?
source d'informationauteur GT.
Vous devez vous connecter pour publier un commentaire.
Si les deux assemblées sont compatibles, vous pouvez définir dans l'application.exe.config ou web.fichier de configuration de toujours utiliser la nouvelle version en déclarant bindingRedirect .
exemple
cette config entrée de dotnet 1.0 indique à l'assemblée chargeur de toujours utiliser la version 1.0.3300.0 peu importe ce qui est compilé dans l'appel exe. La même chose est possible avec les nouveaux dotnet versions
Voici quelques messages à partir d'ici, de SORTE que décrivent comment charger plusieurs versions de la même assemblée:
Ce post explique comment faire référence à deux versions différentes de log4net. Voir @Joe B. commentaire sous la accepté de répondre à un peu plus de détails sur exactement comment il a résolu son problème.
3ème partie des bibliothèques de consulter les différentes versions de log4net.dll
Que la réponse se réfère à ce lien:
L'utilisation de versions différentes de la même assemblée dans le même dossier
Au sein de ce thread, il y a une mise en garde à propos du chargement des versions différentes de la même assemblée dans le même contexte et les références de ce lien sur le site MSDN:
http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions
Voici un autre avec une réponse qui suggère l'utilisation de AssemblyResolve:
Référence de l'égalité des deux assemblées, uniquement clés publiques diffèrent
Si vous avez deux versions différentes d'un même composant, cela signifie que les deux versions peuvent différer non seulement dans la mise en œuvre, mais aussi dans le nombre d'opérations qu'ils exposent? Si c'est le cas, comment peut-on changer de version si certaines fonctions sont uniquement dans l'une des deux versions?
De toute façon, si vous souhaitez charger les deux versions, vous auriez à le faire dans deux domaines d'application, car alors vous pouvez vous décharger celui que vous n'avez pas besoin par la suite. Ensuite, vous pouvez exécuter votre logique dans le bon domaine d'application, comme décrit dans Comment puis-je créer un domaine d'application et d'exécuter mon application?.
Il y a une entrée de blog avec une solution icireportez-vous également à ce fil Le chargement des différentes versions de la même assemblée