Разгрузка сборки после сериализации с Json. NET - PullRequest
3 голосов
/ 11 марта 2020

Нам нужно выгрузить плагины для нашего программного обеспечения. Плагины загружаются в отдельный AssemblyLoadContext (. net core 3.0) и связываются с основным программным обеспечением через сериализованные данные. Если для сериализации использовать Json. NET, ссылки на когда-либо сериализованный тип объекта никогда не освобождаются, и если этот тип определен внутри плагина, AssemblyLoadContext никогда не выгружается.

Нам удалось добиться выгрузки плагина с помощью сложной воли отражения c - некоторая ручная очистка кэша внутри сборки System.ComponentModel.TypeConverter, но это выглядит как грязный хак.

Другой вариант - включите Newtonsoft. Json в плагин и загрузите его в отдельном контексте. Хотя даже когда не только Newtonsoft. Json .dll, но даже System.ComponentModel.TypeConverter.dll загружаются в отдельном контексте, это не помогает. Кэши по-прежнему заполнены в контексте по умолчанию.

Кто-нибудь знает, есть ли хороший способ выгрузить плагин после сериализации его типов с помощью Json. NET?

Большое спасибо за заранее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...