Еще одна проблема, связанная с конфликтами log4net 1.2.11

Я провел последние 2 часа, просматривая эти проблемы на SO, и ничего не работает.

У меня есть решение, которое использует log4net 1.2.11 через NuGet. Он отлично работает на моей 32-разрядной рабочей станции разработки под управлением Windows 7. Он не работает в моей 64-битной тестовой системе Windows 2008 R2. Ошибка, которую я получаю:

Необработанное исключение: System.IO.FileLoadException: Не удалось загрузить файл или сборку 'log4net, Version = 1.2.11.0, Culture = neutral, PublicKeyToken = 669e0ddf0bb1aa2a' или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку.

Я смотрю в каталоге приложения на своей тестовой системе. Файл log4net.dll есть версия 1.2.11.

Версия в GAC была версия 1.2.10. Я удалил его. На моем сервере разработки была версия, которая снова была чем-то еще; Я тоже удалил это. Я перестроен; Я переделал. Я добавил

<dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="669E0DDF0BB1AA2A" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.11.0"/>
</dependentAssembly>

в файл конфигурации. Кажется, что ничего не изменилось. Мой проект развертывания показывает правильную версию и подпись сборщика log4net, который развертывается.

Я не знаю, что еще я могу сделать, но я очень расстраиваюсь, что библиотека протоколирования препятствует запуску моего приложения.

Что я пропустил?

Ответы

Ответ 1

Вот мое решение: я изменил с log4net на Common.Logging на NLog. Это не принесло больших усилий, и я не думаю, что это должно было быть необходимо, но это сработало и хорошо работало.

Ответ 2

У меня возникла эта проблема после обновления log4net через NuGet, только чтобы найти, что новая версия была подписана другим ключом. Вздох. По какой-то причине это стало очевидным только тогда, когда я развернулся на реальном сервере, он не появился в разработке.

Вы можете получить версию "старого ключа" с сайта apache log4net. Просто удалите ссылки из файла проекта и укажите вместо него старую версию.

Ответ 3

У нас такая же проблема. Зависимость, лежащая в основе кода, заключается в том, что 1.2.10 в GAC и NuGet пытается использовать 1.2.11. Мы отказались от использования NuGet для log4net, слишком много головной боли. Кажется, NuGet - это все или ничего.

Ответ 4

Иногда вам приходится действительно разбираться в зависимостях проекта. В моем случае это была ссылка ссылки на фактический проект Stack, который ссылался на другую версию Log4Net.

Чтобы исправить это, я добавил новую версию Log4Net из nuget в проект ServiceStack. Я также убедился, что прямая ссылка использует новейшую версию, и это решило проблему.

Вы можете использовать инструмент зависимостей, чтобы быстро найти, какие ссылки используют конфликтующие версии, но если у вас нет инструмента для этого, вы можете просто скомпилировать ссылку на проект самостоятельно и посмотреть, какая версия log4net.dll будет скопирована в каталог.