2010-12-07 20 views
14

J'ai deux bibliothèques différentes critiques pour mon application qui dépendent de différentes versions de log4net.dll. Essayer les deux dll dans mon dossier bin donne l'erreur habituelle lorsque la pièce 3ème partie que j'utilise est appelée:Les bibliothèques tierces font référence à différentes versions de log4net.dll

Impossible de charger le fichier ou l'assemblage 'log4net, Version = 1.2.10.0, Culture = neutre, PublicKeyToken = 1b44e1d426115821' ou l'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)

Existe-t-il un moyen que l'application peut référencer les deux dll? Les DLL tierces sont le conteneur IOC de Windsor et l'API de Paypal, tous deux essentiels à cette application.

+0

Je vais sortir sur un membre ici, mais je pense que vous pourriez ILMerge les assemblées, même sans posséder le code et cela équivaudrait à absoudre ce problème. –

Répondre

9

Cette question pourrait avoir des réponses qui vous aideront.

Referencing 2 different versions of log4net in the same solution

Alternativement, si elle est la facilité de l'exploitation forestière de Windsor qui dépend de log4net et non Windsor lui-même, vous pourriez être en mesure d'écrire votre propre abstraction log4net basée sur la version de log4net utilisée par l'API PayPal et dire Windsor pour l'utiliser à la place.

Voici l'emplacement de l'abstraction log4net dans le référentiel de code source Château: https://github.com/castleproject/Castle.Core/tree/master/src/Castle.Services.Logging.log4netIntegration

Je ne me château donc je ne peux pas vous dire comment le configurer pour référencer votre propre abstraction log4net, mais je parie que ce n'est pas trop difficile (en supposant que ce soit possible).

Voici un lien vers un autre article sur SO qui décrit la configuration de Castle avec log4net. Il parle aussi brièvement sur la rédaction d'une installation d'enregistrement de journalisation personnalisé:

Logging with Castle.Facilities.Logging and log4net

Bonne chance!

+0

Merci, le premier lien a fonctionné! En supprimant toutes les références de projet à log4net.dll et en utilisant à la place app/web.config pour créer des références d'exécution aux différentes versions, l'application a pu trouver les deux DLL sans se plaindre d'une discordance. Pour plus de détails, voir le lien «Faire référence à 2 versions différentes de log4net dans la même solution» de wageoghe. –

1

Une autre voie à suivre, je pense, mais je ne l'ai jamais fait moi-même, est de les mettre dans le GAC.

Je crois que vous pouvez avoir différentes versions de la même DLL dans le GAC, et ça devrait aller.

Mais je pourrais aussi être fou :)

+3

Oui, vous pouvez, mais ce n'est pas une solution élégante. – alexandrudicu

+1

Vous rencontrez un problème d'évolutivité dans la mesure où vous devez effectuer l'installation GAC sur chaque machine pour cela. Le mettre dans le fichier .config permet de le déployer avec l'application. –