Вы можете попробовать вставить свой код, который определяет плагин, в сборку спутниковой библиотеки DLL. Таким образом, и ваш основной код, и плагины ссылаются на одни и те же типы.
Если плагин может поддерживать свою собственную dll вместо использования той же самой dll, что и в приложении, у вас возникнут проблемы с версиями. Как ваше основное приложение будет обрабатывать вызовы плагинов, которые не реализуют тот же интерфейс?
Когда мы делали это в нашем собственном программном обеспечении, нам приходилось прибегать к вызовам метода отражения вместо приведения к интерфейсу. Это не было элегантно.
Как насчет добавления dll сборок в каталог плагинов. Они должны ссылаться на dll при создании своего приложения, но заставляют их использовать версию dll для основных сборок, когда плагин фактически запускается?