Нам нужно выгрузить плагины для нашего программного обеспечения. Плагины загружаются в отдельный AssemblyLoadContext (. net core 3.0) и связываются с основным программным обеспечением через сериализованные данные. Если для сериализации использовать Json. NET, ссылки на когда-либо сериализованный тип объекта никогда не освобождаются, и если этот тип определен внутри плагина, AssemblyLoadContext никогда не выгружается.
Нам удалось добиться выгрузки плагина с помощью сложной воли отражения c - некоторая ручная очистка кэша внутри сборки System.ComponentModel.TypeConverter, но это выглядит как грязный хак.
Другой вариант - включите Newtonsoft. Json в плагин и загрузите его в отдельном контексте. Хотя даже когда не только Newtonsoft. Json .dll, но даже System.ComponentModel.TypeConverter.dll загружаются в отдельном контексте, это не помогает. Кэши по-прежнему заполнены в контексте по умолчанию.
Кто-нибудь знает, есть ли хороший способ выгрузить плагин после сериализации его типов с помощью Json. NET?
Большое спасибо за заранее!