Один из вариантов - сделать типы внутри «ограниченных» сборок внутренними, а не общедоступными, а затем добавить InternalsVisibleToAttribute
в этих ограниченных сборках, чтобы разрешить доступ к ним из других «каркасных» сборок.
Таким образом, конечный разработчик может добавить ссылку на «ограниченные» сборки (и, вероятно, должен сделать это, чтобы убедиться, что они скопированы для развертывания), но выиграл »Нельзя использовать любой из типов в этих сборках.
РЕДАКТИРОВАТЬ: Другой альтернативой может быть использование ILMerge для построения одной сборки в конце - так что этореальная единица развертывания , даже если вы изначально разделили ее по причинам разделения.
Еще одна альтернатива - объединить все в один проект и полагаться на проверку кода, пространства имен и здравый смыслвыявить нарушения разделения.