Конфликт надстройки с разными версиями одной и той же библиотеки - PullRequest
0 голосов
/ 15 января 2019

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

Позволяет использовать Newtonssoft.Json.dll, так как он довольно распространен. Если я использую 12.0.1, а какая-то другая компания использует 11.0.2, то возникает конфликт. Если их надстройка загружается первой, то я получаю версию 11.0.2, так как она уже загружена, что может привести к краху моего приложения. Если мой загружается первым, это наоборот; их получит 12.0.1 и, вероятно, рухнет. Оба работают без проблем самостоятельно, но один или другой создает фатальную ошибку, если они оба установлены.

Есть ли способ инкапсулировать их, чтобы они загружались независимо? Недавно я обнаружил Costura.Fody и подумал, что это может быть ответом. Тем не менее, он по-прежнему загружает сборку с тем же именем, даже если он загружается со встроенного, а не с диска. Я также заметил, что внутренне он меняет имя на «Costura.Newtonsoft.Json», но когда я попробовал его в режиме отладки, он все равно был загружен как «Newtonsoft.Json». Мне интересно, есть ли способ как-то изменить имя или идентификатор, чтобы .NET загружал зависимости так, чтобы он воспринимал их как разные и мог быть изолирован от других надстроек в том же домене приложения. Что-то вроде загрузки его как ABC.Newtonsoft.Json.dll, а затем другая компания может загрузить как DEF.Newtonsoft.Json.dll или что-то в этом роде.

В любом случае, ищите хороший способ справиться с этим на постоянной основе ... Любая помощь очень ценится.

1 Ответ

0 голосов
/ 15 января 2019

У нас была та же проблема с BouncyCastle, на которую ссылались 2 основные библиотеки, которые мы используем в нашей системе. Одна из библиотек была itextsharp, Средство защиты было, мы добавляем extern alias, где мы импортируем lib. Перед добавлением extern мы устанавливаем свойство Aliases, как на картинке.

enter image description here

Затем мы ссылаемся на BouncyCastle, как показано ниже using itextsharp.Org.BouncyCastle.Security;

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

...