Я занимаюсь разработкой приложения .NET Framework, которое позволяет пользователям поддерживать и сохранять «проекты». Проект может состоять из компонентов, типы которых определены в сборках самой платформы и / или в сборках сторонних производителей, которые будут доступны для платформы посредством еще не построенной архитектуры подключаемых модулей. Когда проект сохраняется, он просто сериализуется в двоичном формате в файл.
Проекты переносимы, поэтому несколько пользователей могут загружать один и тот же проект в свои собственные экземпляры инфраструктуры (так же, как разные пользователи могут открывать один и тот же документ MSWord в своих собственных локальных копиях MSWord). Более того, плагины, доступные для среды одного пользователя, могут быть недоступны для платформы другого.
Мне нужен какой-то способ гарантировать, что когда пользователь пытается открыть (т. Е. Десериализовать) проект, который включает тип, чья определяющая сборка не может быть найдена (из-за несовместимости версии фреймворка или отсутствия плагина) проект все еще открывается, но нарушающий тип каким-то образом заменен или опущен. Проблема в том, что исследование, которое я провел до настоящего времени, даже не намекает на подходящий подход. Любые идеи будут высоко оценены, спасибо.