Недавно добавлен 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.