Как исправить ошибку «Нет способа разрешить конфликт»? - PullRequest
37 голосов
/ 22 марта 2012

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

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

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

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

У нас есть специальный каталог - назовите его c:\references - где мы собираем все наши библиотеки DLL и которые все наши приложения используют для ссылки на наши внутренние библиотеки DLL.Поэтому я специально установил ссылку в нашем объекте данных на c: \ reference \ 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.Для нас это не совсем подходящее решение, так как оно используется практически во всей нашей системе.

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

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

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

Ответы [ 4 ]

16 голосов
/ 23 марта 2012

Откройте файл проекта (.csproj в C # или .vbproj в VB.NET) для редактирования.

Убедитесь, что ссылка log4net Полное имя типа , имеет HintPath и SpecificVersion=True.

<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
  <HintPath>..\references\log4net.dll</HintPath>
  <SpecificVersion>True</SpecificVersion>
</Reference> 

Сохраните файл и попробуйте восстановить.

2 голосов
/ 26 апреля 2012

Мы обнаружили, что время работы кристалла определенно было проблемой. Если мы удалим log4net в %windir%\assembly, что установил Crystal Runtime, то предупреждающее сообщение исчезнет Что странно, если я установлю log4net 1.2.10 с сайта log4net в GAC, то предупреждающее сообщение не появится снова. Если кто-то может объяснить это, пожалуйста, добавьте в эту тему. Crystal подписал log4net со своим собственным ключом строгого имени (токен открытого ключа другой).

Ключ к решению проблемы log4net заключается в том, что log4net является проектом с открытым исходным кодом. Это означает, что мы можем просто собрать dll из источника с другим именем. Еще не пробовал, но это должно решить проблему. У нас будет дополнительный шаг сборки из исходного кода каждый раз, когда мы хотим обновить log4net, но учитывая, сколько мы собираемся обновить dll, это не имеет большого значения.

1 голос
/ 12 октября 2018

Вы также получите это сообщение при запуске приложения net Framework v4.6.2, которое ссылается на библиотеки netstandard2_0. Net462 не полностью поддерживает netstandard, поэтому некоторые dll дублируются разными версиями. Даже если вы не ссылаетесь на что-то (например, System.Drawing), вы можете столкнуться с конфликтами. Подумайте об обновлении до более высокой сетевой версии (я только что перешел на 4.7.2, которая разрешила это).

1 голос
/ 07 сентября 2018

Причина:

У вас есть две разных сборки с одинаковым именем файла . Компилятор не знает, какой из них выбрать для копирования в выходной каталог, поэтому выдает ошибку No way to resolve conflict between....

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

В вашем случае у вас есть две разные версии одной и той же сборки (log4net)

решение:

В моем случае решение было просто переименовать один из файлов DLL.

В вашем случае решение состоит в том, чтобы выяснить, где была указана более старая сборка, и исправить ее для ссылки на более новую.

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