Ссылка на 2 различных версии log4net в том же решении

Я использую 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 в ближайшее время.

Что лучший способ состоит в том, чтобы обработать это? Действительно ли возможно решить вообще?

77
задан Daniel Williams 15 March 2017 в 03:49
поделиться

2 ответа

Я нашел решение, используя этот ответ на аналогичный вопрос

Вы создаете в своем проекте 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]

147
ответ дан 24 November 2019 в 10:54
поделиться

Если перенаправление привязки не работает и SDK для простого учета является закрытым исходным кодом, возможным решением является перекомпиляция NHibernate для использования log4net 1.2.9.0.

3
ответ дан 24 November 2019 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: