Одна из вещей, которую вы не можете сделать в .Net, - выгрузить DLL из домена приложения после его загрузки.Возможно, вы захотите сделать это (скажем), если разные надстройки используют разные версии сторонних библиотек DLL с разными сигнатурами API.MAF может поддерживать это, создавая новый AppDomain для каждого AddIn - каждый AppDomain имеет свою собственную версию сторонней DLL.
Вот почему вам необходимо иметь отдельную копию сторонней DLL в каждой папке AddIn:позволяя вам изолировать каждый AddIn от изменений в реализации или зависимостей в других AddIns.
Однако ответ также частично зависит от того, как .Net разрешает зависимости сборок и как вы активируете AddIns.
.Net будет проверять наличие сборочных зависимостей в BaseDirectory и PrivateBinPath AppDomain, в котором используется тип (исключая GAC).
Когда вы активируете AddIn, это делается внутри AppDomain.Если вы не укажете один, вы получите новый AppDomain для каждого AddIn, и для этого AppDomain будет установлен BaseDir в папку AddIn - и, таким образом, будут найдены сторонние DLL.
Если вы укажете домен приложения, то зависимые сборки будут искать в BaseDir и PrivateBinPath этого домена приложения.Это может привести к полному игнорированию любых сторонних библиотек DLL в папке AddIn!
Помните, что MAF также имеет нестандартные правила в отношении структуры каталогов AddIn - он даже запрещает DLL-файлы представления AddIn находиться в самом каталоге AddIn..
Я пришел к выводу, что для поддержки всех различных режимов активации AddIn в папке AddIn должна быть только одна DLL .Мы обновляем наш процесс сборки, чтобы погрузить все зависимые библиотеки DLL в библиотеку AddIn, включая сателлитные сборки, библиотеки сериализации Sgen, а также сторонние библиотеки DLL.
Имея это в виду, возможно, вам стоит поискать «дублирующую DLL"проблема в процессе сборки?