Конфликт надстройки с разными версиями одной и той же библиотеки

Я в основном создаю программы, которые являются надстройками к другому родительскому программному обеспечению; другие люди и компании также делают надстройки для родительского программного обеспечения. Это становится проблемой, когда две компании используют разные версии одной и той же сторонней библиотеки, они загружаются в один и тот же домен приложений, поскольку их загружает родительское программное обеспечение.

Давайте использовать 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;

Надеюсь это поможет

Другие вопросы по тегам