У меня была очень похожая проблема со ссылкой на сборку, которая возникала, когда моя библиотека C # имела зависимую сборку C ++ / CLI.
Проблема в том, что я унаследовал открытый класс от той сборки C ++ / CLI в моей библиотеке сборки C #. Это означало, что цепочка наследования охватила несколько сборок.
Я надеялся, что любой клиент будет достаточно умен, чтобы косвенно загружать сборку C ++ / CLI в любое время, когда это понадобится библиотеке C #, но это было не так даже во время компиляции.
Я избавился от этой проблемы, нарушив наследование между классами, охватывающими эти две библиотеки сборок, и вместо этого использовал агрегирование.
Мой клиент был наконец доволен и больше не требовал сборки C ++ / CLI в качестве зависимости.
Словом, вам, вероятно, придется убедиться, что SuitableStandardException
не наследуется от SuperException
, чтобы исключить SuperException.DLL
в качестве ссылки.
Используйте инкапсуляцию вместо наследования и создайте элемент данных SuperException
в своем новом SuitableStandardException
.
Если это не решит проблему, у вас может быть больше классов, охватывающих наследование в некоторых сборках, в вашем случае SuperAssembly.DLL
и superException.dll
.
Если вы не можете найти их всех, попробуйте этот трюк:
Сделайте все ваши публичные члены и классы во SuperAssembly.DLL
внутреннем.
В SuperAssembly.DLL подружитесь с SuperException.DLL
:
[assembly:InternalsVisibleTo("SuperException, PublicKey=0024000004800000....)]
Убедитесь, что они создают и удаляют ссылку SuperAssembly.DLL
из любого клиента, который уже ссылается на SuperException.DLL
.