Конфликт надстройки с разными версиями одной и той же библиотеки
Я в основном создаю программы, которые являются надстройками к другому родительскому программному обеспечению; другие люди и компании также делают надстройки для родительского программного обеспечения. Это становится проблемой, когда две компании используют разные версии одной и той же сторонней библиотеки, они загружаются в один и тот же домен приложений, поскольку их загружает родительское программное обеспечение.
Давайте использовать Newtonssoft.Json.dll, так как это довольно часто. Если я использую 12.0.1, а какая-то другая компания использует 11.0.2, то возникает конфликт. Если их надстройка загружается первой, то я получаю версию 11.0.2, так как она уже загружена, что может привести к краху моего приложения. Если мой загружается первым, это наоборот; их получит 12.0.1 и, вероятно, рухнет. Оба работают без проблем самостоятельно, но один или другой создает фатальную ошибку, если они оба установлены.
Есть ли способ инкапсулировать их, чтобы они загружались независимо? Я недавно обнаружил Костуру. Фоди и подумал, может быть, это был ответ. Тем не менее, он по-прежнему загружает сборку с тем же именем, даже если он загружается со встроенного, а не с диска. Я также заметил, что внутренне он меняет имя на "Costura.Newtonsoft.Json", но когда я попробовал его в режиме отладки, он все равно был загружен как "Newtonsoft.Json". Мне интересно, есть ли способ как-то изменить имя или идентификатор, чтобы.NET загружал зависимости так, чтобы он воспринимал их как разные и мог быть изолирован от других надстроек в том же домене приложения. Что-то вроде загрузки его как ABC.Newtonsoft.Json.dll, а затем другая компания может загрузить как DEF.Newtonsoft.Json.dll или что-то в этом роде.
В любом случае, ищите хороший способ справиться с этим на постоянной основе... Любая помощь очень ценится.
1 ответ
У нас была такая же проблема с BouncyCastle
ссылались на 2 основные библиотеки, которые мы используем в нашей системе. Одна из библиотек была itextsharp
, Средство защиты было добавлено extern alias
куда мы импортируем lib. Перед добавлением extern мы устанавливаем свойство Aliases, как на картинке.
Тогда мы ссылались на BouncyCastle
как показано ниже using itextsharp.Org.BouncyCastle.Security;
Надеюсь это поможет