Как исправить ошибку «Нет способа разрешить конфликт между»?

Недавно добавленный log4net.dll к нашему объекту данных. Наш объект данных строится отлично, но когда вы пытаетесь построить что-либо, что ссылается на наш объект данных, вы получаете следующую ошибку:

Невозможно разрешить конфликт между «log4net, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 692fbea5521e1304» и «log4net, версия = 1.2.9.0, культура = нейтральная, PublicKeyToken = b32731d11ce58905». Произвольный выбор «log4net, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 692fbea5521e1304».

Я нашел следующую ветку, которая позволила мне получить больше информации о проблеме.

log4net используется в нашем проекте для разных целей. Например, Crystal установил 1.2.9 в GAC. Я знаю, что инфрагика использует 1.2.10.

У нас есть специальный каталог — назовите его c:\references— где мы собираем все наши DLL и который все наши приложения используют для ссылки на наши внутренние DLL. Поэтому я специально установил ссылку в нашем объекте данных на c:\references\log4net.dll версии 1.2.11. Что странно, потому что в сообщении об ошибке выше вы не видите 1.2.11. На dll ссылается конкретная версия: = True & Copy Local: = True. Я проверил каталог сборки, и версия 1.2.11 log4net была перемещена правильно.

Если это поможет, вот некоторые из подробных сообщений об ошибках:

There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905".
  No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.
      References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll].
          C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll

   References which depend on "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905" [C:\Program Files (x86)\Business Objects\Common\4.0\managed\log4net.dll].          c:\references\DBObjectAdoNet.dll
            Project file item includes which caused reference "c:\references\DBObjectAdoNet.dll".

Обновление: пока единственный найденный мной способ исправить ошибку — ссылаться на log4net во всем, что ссылается на DBObjectAdoNet.dll. Это не совсем полезное решение для нас, так как почти все во всей нашей системе использует его.

2nd Update: Попытался добавить log4net в GAC, думая, что это решит проблему, но все равно безуспешно.

3-е обновление: я позвонил в службу поддержки Microsoft. Они хотят, чтобы я использовал Assembly.LoadFrom(), что я очень и очень не решаюсь сделать, поскольку мы делаем более 300 000 вызовов в одном приложении и потребовали бы отражения для каждого вызова, что немного замедлило бы работу.

Я обнаружил, что если я удалю среду выполнения Crystal на своей машине, ошибка исчезнет, ​​что не имеет большого смысла, поскольку единственное, что она делает, насколько я могу судить, это удаляет log4net 1.2.10.0 из GAC в рамках .NET framework 2.0, что не имеет значения, поскольку приложение является приложением .NET Framework 4.

39
задан Community 23 May 2017 в 12:32
поделиться