У нас есть проект asp.net 4.0, который использует пару фреймворков, зависящих от log4net версии 1.2.10.0. Сегодня я попытался включить новую структуру, которая зависит от log4net версии 1.2.11.0, с тех пор я застрял:
log4net 1.2.10.0 имеет publickeytoken = 1b44e1d426115821
log4net 1.2.11.0 имеет publickeytoken = 669e0ddf0bb1aa2a
Поскольку они разные, я не могу использовать ни перенаправления сборки (чтобы все фреймворки использовали одну и ту же версию log4net), ни кодовую базу (чтобы только новая структура использовала версию 1.2.11.0) через элемент времени выполнения в web.config.
Какие у меня здесь варианты?
(и почему log4net продолжает менять publickeytokens между версиями, насколько я понимаю, причиной переключения между версией 1.2.9.0 и 1.2.10.0 был потерянный ключ, они снова потеряли ключ? Я добровольно отправлю свой Dropbox чтобы сохранить его, если он им понадобится ...)
Изменить: Хорошо, поэтому у ребят из log4net, по-видимому, была идея, что выпуск с двумя ключами был хорошей идеей, но это означает, что каждая используемая вами структура должна согласовывать, какой из двух вариантов они предпочитают, или эти структуры не могут работать. рядом в том же домене приложения. Неужели только я считаю, что это ужасная идея? если бы все так поступили, все бы сломалось, верно?
Edit2: Как я уже сказал, я не использую log4net в своем бизнес-коде, но я использую несколько фреймворков, которые зависят от 1.2.10.0, и проблема возникла, когда я попытался использовать новую структуру, которая зависела от 1.2.11.0 (новый ключ ), поэтому ответ Стефанса неприменим, потому что новая структура будет ожидать новый ключ, а не старый
источник
Ответы:
Вот так у меня все заработало с версией 1.2.11.0.
источник
Method not found: 'Void log4net.Config.BasicConfigurator.Configure()'
Я использую последнюю версию log4net, которую я скачал через nuget. Однако для одной из используемых мной библиотек требуется старая версия. Мои проблемы привели меня к этому вопросу.
Проблема с другими ответами заключается в том, что они используют одну и ту же версию dll для всех привязок. Я хочу использовать функции новой версии для всего остального, кроме устаревшей зависимости.
Для этого вам необходимо сделать следующее:
log4net.1.2.10.dll
. Включите его в свой проект запуска с Сложение действия набора вNone
и «Копировать если новее»App.config
href
Атрибутов определяет , где старая версия. Следовательно, все остальные запросы для log4net будут указывать на новую версию.источник
Вы можете скачать версию log4net 1.2.11.0, подписанную старым ключом. Причина, по которой ключ был изменен на новый, объясняется в их FAQ:
http://logging.apache.org/log4net/release/faq.html#two-snks
(В основном новый ключ общедоступен, и по какой-то причине они не хотели включать старый ключ в дистрибутив. Мне непонятно, почему они просто не сделали старый ключ общедоступным)
источник
Не знаю, подходит это для вашего конкретного случая или нет, но вы можете перекомпилировать одну из фреймворков, чтобы они использовали log4net с тем же открытым ключом. В моем случае это был FluentNHibernate, который использует log4net 1.2.10 и Combres с log4net 1.2.11 с новым ключом. Я скачал log4net 1.2.11, подписанный старым ключом, и перекомпилировал Combress с ним. После этого добавлено перенаправление привязки сборки с 1.2.10 на 1.2.11, и он начинает работать.
источник
Это не обязательно сработает во всех случаях, но поскольку проект, который использовал log4net, был OSS, я загрузил исходный код, заменил конфликтующую версию log4net версией, которую использовал я, и перестроил проект. В моем случае это была Topshelf, так что теперь у меня есть версия сборки Topshelf, которая была построена с той же версией log4net, которую я использую, и теперь я могу ссылаться на обе без проблем.
источник
Я попытался перейти по ссылкам, указанным выше, но похоже, что все ссылки на сайте Apache не работают. Тогда вот что я сделал, чтобы решить проблему:
В Visual Studio используйте Nuget, чтобы загрузить и установить последнюю версию log4net (1.2.13.0). Диспетчер пакетов NuGet автоматически загрузит и обновит весь log4net (1.2.11.0) до последней версии.
источник