Я очень новичок в этом, поэтому я приношу свои извинения, если мой вопрос плохо структурирован или находится не в том месте и т. Д. Я хорошо разбирался в решениях и пытался использовать несколько разных подходов, t нашел что-то, что работает так ....Как остановить Nhibernate log4net, конфликтующий с существующим log4net?
У меня есть решение, которое использует Nhibernate, и, следовательно, необходимо использовать log4net V1.2.10.0, который входит в папку log4net/2.0 /. Однако мое решение также связано с рядом других решений, к которым у меня очень ограниченный доступ. Они используют один и тот же log4net V.1.2.10.0, но в папке: log4net/1.2/
Когда я запускаю свое решение, я получаю эту ошибку.
{"Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral,
PublicKeyToken=e27b8fa57f63a98d' or one of its dependencies. The located assembly's
manifest definition does not match the assembly reference. (Exception from HRESULT:
0x80131040)":"log4net, Version=1.2.10.0, Culture=neutral,
PublicKeyToken=e27b8fa57f63a98d"}
Я попытался изменить те решения, которые он называет, однако каждый раз, когда я изменить один я получаю сообщение об ошибке в этом решении, как только он пытается использовать другое решение, так что я должен изменить другой и так на. Есть слишком много решений для изменения и слишком много взаимозависимостей с другими решениями, для которых у меня нет абсолютно никакого контроля над тем, чтобы я мог изменить их все, чтобы они использовали log4net/2.0.
Я нашел еще один вопрос (Referencing 2 different versions of log4net in the same solution), который, я думаю, в основном та же проблема, и они изменяют app.config с привязкой, однако я не могу понять, что это правильно, поскольку я все еще получаю такая же ошибка. Связывание я включил в моем app.config это:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="e27b8fa57f63a98d" />
<codeBase version="1.2.10.0" href="2.0\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821"/>
<codeBase version="1.2.10.0" href="1.2\log4net.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Я не уверен, что ответ на другой вопрос, значит, когда он говорит: «Вы можете создать 2 папки в вашем проекте один для каждой версии log4net. Вы помещаете каждый файл log4net.dll в соответствующую папку, добавляя файл к решению (не добавляя ссылку). Вы можете установить копию для вывода свойства каталога для копирования всегда, чтобы она автоматически копировалась в выходную папку, когда вы строите ». И мне нужно будет сделать это для каждого решения, на которое ссылается мое решение?
В идеале я хочу, чтобы иметь возможность внести поправку в мое решение, что просто означает, что ему все равно, что log4net использует любое из решений, но они все равно могут передавать сообщения журнала между собой. Я предполагаю, что это возможно, поэтому любая помощь будет чрезвычайно оценена. Либо это, либо как отключить регистратор nHibernate, так что ему все равно, что я использую log4net, поэтому я могу просто продолжать использовать log4net/1.2, который использует все остальные решения. Я пробовал всевозможные вещи, чтобы отключить его, но он все еще, похоже, пытается найти log4net/2.0.
Извините, только что понял, что я не включил эту часть. Когда я использую привязку выше, я получаю эту ошибку, как только я пытаюсь запустить решение. '{" Невозможно загрузить файл или сборку 'log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 1b44e1d426115821' или одну из его зависимостей. Определение манифеста расположенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) ":" log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 1b44e1d426115821 "}' Если я не использую привязку, она работает до тех пор, пока она не попытается ссылаться на другое решение, тогда я получаю ошибку наверху. –
Какую версию NHibernate вы используете? NHibernate больше не требует конкретной версии log4net с версии 3.0.0. – cremor
Не беспокойтесь, это не редкость, когда вы сталкиваетесь с проблемами управления версиями «DLL hell» при запуске проектов OSS; но стоит ли это придерживаться –