Ссылка на 2 разных версии log4net в одном решении
Я использую NHibernate 2.1.2.400, который ссылается на log4net 1.2.10.0. В том же проекте я также использую простой учетный SDK, к сожалению, он все еще использует log4net 1.2.9.0.
Поэтому я могу заставить NHibernate работать, если ссылаюсь на log4net 1.2.10.0, но simpleSDK не работает. И наоборот…
Я предполагаю, что большинство проблем связано с тем, что log4net изменил свой код сборки. Я попытался использовать redirect привязки без успеха: у 2 DLL нет одинакового ключа.
- NHibernate с TransactionScope
- Запрос на ссылку HasMany
- Критерии.DISTINCT_ROOT_ENTITY против Projections.distinct
- Невозможно применить объект типа NHibernate.Collection.Generic.PersistentGenericBag к списку
- Entity Framework 4 vs NHibernate
Я рассматриваю возможность перекомпиляции NHibernate для использования log4net 1.2.9.0, но мне кажется, что это неправильно, и я чувствую, что Simply Accounting не будет обновлять свой SDK, чтобы использовать log4net 1.2.10.0 в ближайшее время.
Каков наилучший способ справиться с этим? Можно ли вообще разрешить?
- Генераторы NHibernate
- Как обновить схемы таблиц базы данных с помощью генерации схемы NHibernate?
- Список против набора против сумки в NHibernate
- Полиморфизм. Является ли объект ORM субъектом домена или объектом данных?
- Персистентные данные с помощью программирования против интерфейса
- Как реализовать Единицу работы, которая работает с EF и NHibernate
- Лучший способ сохранить упорядоченный список в базе данных, сохраняя порядок
- NHibernate Как мне запросить свойство IList ?
Я нашел решение, используя этот ответ на аналогичный вопрос
Вы создаете 2 папки в своем проекте по одному для каждой версии log4net. Поместите каждый log4net.dll в соответствующую папку, добавив файл в решение (а не ссылку на ссылку). Вы можете установить копию для вывода свойства каталога для копирования всегда, чтобы она автоматически копировалась в выходную папку при ее создании.
Затем вы модифицируете файл app.config, добавив что-то вроде этого:
вы можете получить токен открытого ключа сборки, используя sn -T [assemblyName]
Вы можете добавить исключение в реестр. Просто добавьте эти ключи:
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 для перечисленных сборок. Теоретически это проблема безопасности, но так как закрытый ключ находится в открытом доступе, это вряд ли повлияет.
Если переадресация привязки не работает, и простой учетный SDK является закрытым исходным кодом, возможным решением является перекомпиляция NHibernate для использования log4net 1.2.9.0.