ограничить добавление ссылки для сборки - PullRequest
1 голос
/ 01 августа 2011

У меня есть фреймворк, который содержит несколько сборок.Несколько сборок было создано из-за логического разделения кода.Предполагается, что эта структура будет распространяться как для разработчиков, так и для конечных пользователей.Разработчик должен использовать несколько сборочных фреймворков для разработки своих модулей.Но все остальные сборки требуются для запуска модулей.Из нескольких сборок я хочу, чтобы только несколько сборок могли быть добавлены в ссылку на проект, а другие не должны добавляться в ссылки на проекты разработчика.Другими словами, я хочу, чтобы разработчик не мог использовать типы, содержащиеся в сборках, которые не предназначены для разработки плагинов.Каков наилучший способ сделать это?Я хочу избежать передачи какого-либо объекта в конструктор каждого типа в этих сборках и проверить их.

Могу ли я воспользоваться AppDomain или чем-то подобным, который идентифицирует тип, создаваемый основным приложением или модулем.Если это не основное приложение, то выведите исключение или не инициализируйте.Любое изменение в архитектуре предлагается.

Ответы [ 2 ]

5 голосов
/ 01 августа 2011

Один из вариантов - сделать типы внутри «ограниченных» сборок внутренними, а не общедоступными, а затем добавить InternalsVisibleToAttribute в этих ограниченных сборках, чтобы разрешить доступ к ним из других «каркасных» сборок.

Таким образом, конечный разработчик может добавить ссылку на «ограниченные» сборки (и, вероятно, должен сделать это, чтобы убедиться, что они скопированы для развертывания), но выиграл »Нельзя использовать любой из типов в этих сборках.

РЕДАКТИРОВАТЬ: Другой альтернативой может быть использование ILMerge для построения одной сборки в конце - так что этореальная единица развертывания , даже если вы изначально разделили ее по причинам разделения.

Еще одна альтернатива - объединить все в один проект и полагаться на проверку кода, пространства имен и здравый смыслвыявить нарушения разделения.

4 голосов
/ 01 августа 2011

Вы можете сделать все типы в других сборках internal, чтобы предотвратить их использование вне определяющей сборки.

Вы можете использовать атрибут [InternalsVisibleTo] , чтобы сделать их видимыми для других ваших сборок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...