Я использую NHibernate 2.1.2.400, который ссылается на log4net 1.2.10.0. В том же проекте я также использую просто бухгалтерский SDK, печально он все еще использует log4net 1.2.9.0.
Таким образом, я могу заставить NHibernate работать, если я ссылаюсь на log4net 1.2.10.0, но simplySDK не работают. И наоборот...
Я предполагаю, что большинство проблем возникает из того, что log4net изменил свой ключ блока. Я пытался использовать обязательное перенаправление без успеха: 2 DLLs не имеют того же ключа.
Я считаю перекомпиляцию NHibernate для использования log4net 1.2.9.0, но это походит на неправильный поступок, и мое чувство состоит в том, что Просто Учет не будет обновлять их SDK для использования log4net 1.2.10.0 в ближайшее время.
Что лучший способ состоит в том, чтобы обработать это? Действительно ли возможно решить вообще?
Я нашел решение, используя этот ответ на аналогичный вопрос
Вы создаете в своем проекте 2 папки, по одной для каждой версии log4net. Поместите каждый файл log4net.dll в соответствующую папку, добавив файл в решение (не с добавлением ссылки). Вы можете настроить свойство копировать в выходной каталог на копирование всегда, чтобы оно автоматически копировалось в выходную папку при сборке.
Затем вы изменяете файл app.config, добавляя что-то вроде этого:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" />
<codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
<codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
<codeBase version="1.2.11.0" href="log4net.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
вы можете получить токен открытого ключа сборки, используя sn -T [assemblyName]
Если перенаправление привязки не работает и SDK для простого учета является закрытым исходным кодом, возможным решением является перекомпиляция NHibernate для использования log4net 1.2.9.0.