Nous avons un projet asp.net 4.0 qui utilise quelques frameworks qui dépendent de la version 1.2.10.0 de log4net. Aujourd'hui, j'ai essayé d'inclure un nouveau framework qui dépend de la version 1.2.11.0 de log4net, je suis bloqué depuis:
log4net 1.2.10.0 a publickeytoken = 1b44e1d426115821
log4net 1.2.11.0 a publickeytoken = 669e0ddf0bb1aa2a
Comme ils sont différents, je ne peux utiliser ni les redirections d'assembly (pour que tous les frameworks utilisent la même version de log4net) ou codebase (pour que le nouveau framework utilise uniquement la version 1.2.11.0) via l'élément d'exécution dans web.config.
Quelles sont mes options ici?
(et pourquoi le bip est-ce que log4net continue de changer publickeytokens entre les versions, si je comprends bien, une clé perdue était la raison du passage de la version 1.2.9.0 à 1.2.10.0, ont-ils encore perdu la clé? pour le garder en sécurité s'ils en ont besoin ...)
Edit: Ok, donc les gars de log4net ont apparemment eu l'idée que la libération avec deux clés était une bonne idée, mais cela signifie que chaque framework que vous utilisez doit se mettre d'accord sur laquelle des deux saveurs ils préfèrent, ou ces frameworks ne peuvent pas fonctionner de côté côte à côte dans le même domaine d'application. Suis-je le seul à trouver cette idée horrible? si tout le monde faisait cela, tout s'effondrerait, non?
Edit2: Comme je l'ai dit, je n'utilise pas log4net dans mon code métier, mais j'utilise plusieurs frameworks qui dépendent de 1.2.10.0, et le problème est survenu lorsque j'ai essayé d'utiliser un nouveau framework qui dépendait de 1.2.11.0 (nouvelle clé ), donc la réponse de Stefans ne s'applique pas, car le nouveau framework attendra la nouvelle clé, pas l'ancienne
la source
Réponses:
C'est ainsi que j'ai fait fonctionner les choses avec la version 1.2.11.0.
la source
Method not found: 'Void log4net.Config.BasicConfigurator.Configure()'
J'utilise la dernière version de log4net que j'ai téléchargée via nuget. Cependant, l'une des bibliothèques que j'utilise nécessite l'ancienne version. Mes ennuis m'ont conduit à cette question.
Le problème avec les autres réponses est qu'elles utilisent la même version de DLL pour toutes les liaisons. Je souhaite utiliser les fonctionnalités de la nouvelle version pour tout le reste, sauf la dépendance héritée.
Pour pouvoir le faire, vous devez procéder comme suit:
log4net.1.2.10.dll
. Incluez-le dans votre projet de démarrage avec l' action Construire définie surNone
et "Copier si plus récent"App.config
Les
href
attributs identifient où se trouve l'ancienne version. Par conséquent, toutes les autres demandes de log4net pointeront sur la nouvelle version.la source
Vous pouvez télécharger une version de log4net 1.2.11.0 qui est signée avec l'ancienne clé. La raison pour laquelle la nouvelle clé est modifiée est expliquée dans leur FAQ:
http://logging.apache.org/log4net/release/faq.html#two-snks
(Fondamentalement, la nouvelle clé est accessible au public et pour une raison quelconque, ils ne voulaient pas inclure l'ancienne clé dans la distribution. Je ne vois pas pourquoi ils n'ont pas simplement rendu l'ancienne clé accessible au public)
la source
Je ne sais pas si cela convient ou non à votre cas particulier, mais vous pouvez recompiler l'un des frameworks, afin qu'ils utilisent log4net avec la même clé publique. Dans mon cas, c'était FluentNHibernate qui utilise log4net 1.2.10 et Combres avec log4net 1.2.11 avec une nouvelle clé. J'ai téléchargé log4net 1.2.11 signé avec l'ancienne clé et recompilé Combress avec. Après cette redirection de liaison d'assembly ajoutée de 1.2.10 à 1.2.11 et cela commence à fonctionner.
la source
Cela ne fonctionnera pas nécessairement dans tous les cas, mais comme le projet qui utilisait log4net était OSS, j'ai téléchargé la source, remplacé la version en conflit de log4net par la version que j'utilisais et reconstruit le projet. Dans mon cas, c'était Topshelf, donc j'ai maintenant une version de l'assembly Topshelf qui a été construite avec la même version de log4net que j'utilise et maintenant je peux référencer les deux sans problème.
la source
J'ai essayé d'accéder aux liens fournis ci-dessus, mais il semble que tous les liens du site Apache ne fonctionnent pas. Ensuite, voici ce que j'ai fait pour résoudre le problème:
À partir de votre Visual Studio, utilisez Nuget pour télécharger et installer la dernière version de log4net (1.2.13.0). Le gestionnaire de packages NuGet téléchargera et mettra à niveau automatiquement tous les log4net (1.2.11.0) vers la dernière version.
la source