Ссылка на 2 разные версии log4net в одном решении - PullRequest
75 голосов
/ 01 июля 2010

Я использую NHibernate 2.1.2.400, который ссылается на log4net 1.2.10.0.В том же проекте я также использую SDK для простого учета, к сожалению, он все еще использует log4net 1.2.9.0.

Так что я могу заставить NHibernate работать, если я ссылаюсь на log4net 1.2.10.0, но просто SDK не работает,И наоборот ...

Я предполагаю, что большинство проблем связано с тем, что log4net изменил свой ключ сборки.Я попытался с помощью перенаправления привязки безуспешно: 2 DLL не имеют одинакового ключа.

Я рассматриваю перекомпиляцию NHibernate для использования log4net 1.2.9.0, но кажется, что это неправильно, и я чувствую, чточто Simply Accounting не будет обновлять свой SDK для использования log4net 1.2.10.0 в ближайшее время.

Каков наилучший способ справиться с этим?Можно ли вообще решить?

Ответы [ 3 ]

144 голосов
/ 02 июля 2010

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

Вы создаете 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]

7 голосов
/ 04 февраля 2016

Вы можете добавить исключение в реестр. Просто добавьте эти ключи:

HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,681549d62126b7b8
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,1b44e1d426115821
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,669e0ddf0bb1aa2a

Это приведет к тому, что среда выполнения .net пропустит проверку для перечисленных сборок. Теоретически это проблема безопасности, но поскольку закрытый ключ в любом случае открыт, это вряд ли повлияет.

3 голосов
/ 01 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...