Ответ 1
Вот мое решение: я изменил с log4net на Common.Logging на NLog. Это не принесло больших усилий, и я не думаю, что это должно было быть необходимо, но это сработало и хорошо работало.
Я провел последние 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, который развертывается.
Я не знаю, что еще я могу сделать, но я очень расстраиваюсь, что библиотека протоколирования препятствует запуску моего приложения.
Что я пропустил?
Вот мое решение: я изменил с log4net на Common.Logging на NLog. Это не принесло больших усилий, и я не думаю, что это должно было быть необходимо, но это сработало и хорошо работало.
У меня возникла эта проблема после обновления log4net через NuGet, только чтобы найти, что новая версия была подписана другим ключом. Вздох. По какой-то причине это стало очевидным только тогда, когда я развернулся на реальном сервере, он не появился в разработке.
Вы можете получить версию "старого ключа" с сайта apache log4net. Просто удалите ссылки из файла проекта и укажите вместо него старую версию.
У нас такая же проблема. Зависимость, лежащая в основе кода, заключается в том, что 1.2.10 в GAC и NuGet пытается использовать 1.2.11. Мы отказались от использования NuGet для log4net, слишком много головной боли. Кажется, NuGet - это все или ничего.
Иногда вам приходится действительно разбираться в зависимостях проекта. В моем случае это была ссылка ссылки на фактический проект Stack, который ссылался на другую версию Log4Net.
Чтобы исправить это, я добавил новую версию Log4Net из nuget в проект ServiceStack. Я также убедился, что прямая ссылка использует новейшую версию, и это решило проблему.
Вы можете использовать инструмент зависимостей, чтобы быстро найти, какие ссылки используют конфликтующие версии, но если у вас нет инструмента для этого, вы можете просто скомпилировать ссылку на проект самостоятельно и посмотреть, какая версия log4net.dll будет скопирована в каталог.