Недавно добавлен log4net.dll в наш объект данных. Наш объект данных строит отлично, но когда вы пытаетесь построить что-либо, что ссылается на наш объект данных, вы получите следующую ошибку:
Невозможно разрешить конфликт между "log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304" и "log4net, Version = 1.2.9.0, Culture = neutral, PublicKeyToken = b32731d11ce58905". Выбор "log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304" произвольно.
Я нашел следующий поток, который позволил мне получить больше информации о проблеме.
log4net используется для разных целей в нашем проекте. Например, кристалл установил 1.2.9 в GAC. Я знаю, что infragictics использует 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. Это не очень удобное для нас решение, поскольку все в нашей системе использует его.
2-е обновление. Пробовал помещать log4net в мышление GAC, чтобы устранить проблему, но все равно не идти.
3-е обновление. Я позвонил в Microsoft. Они хотят, чтобы я использовал Assembly.LoadFrom(), который я очень, очень не решаюсь, так как мы делаем более 300 000 вызовов в одном приложении и потребуем отражения для каждого вызова, который немного замедлит работу.
Я выяснил, удалю ли кристалл во время работы на моем компьютере, ошибка уходит, что не имеет большого смысла, потому что единственное, что он делает, насколько я могу судить, это удалить log4net 1.2.10.0 из GAC в папках .NET framework 2.0, что не имеет значения, потому что приложение представляет собой приложение .NET framework 4.