Скрытие типов из списка в Assembly.GetTypes в .net - PullRequest
9 голосов
/ 20 декабря 2011

Я всюду искал возможное решение этого вопроса, но, похоже, не могу найти ответ.Моя проблема в том, что у меня есть несколько классов, которые нужно полностью скрыть от Assembly.getTypes, так как я пишу плагин для приложения, и он выбирает типы, которые мне нужно оставить скрытыми (это происходит, даже если они объявлены какчастные или внутренние классы).

кто-нибудь знает, как изменить то, что Assembly.GetTyes возвращает, или атрибут aficionado, который будет препятствовать тому, чтобы эти типы были перечислены?

Ответы [ 3 ]

6 голосов
/ 20 декабря 2011

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

Создание 2 сборок - одна для плагина, а вторая для других типов. Второй будет помещен в другой каталог известный и динамически загружен в первый при необходимости. (Например, через Assembly.LoadFrom .)

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

EDIT
Комментарий @SLaks убирает хрупкость этого решения. Если вы встраиваете вторую сборку как ресурс и загружаете ее во время выполнения, приложение, вызывающее Assembly.GetTypes, не увидит типы, которые вы хотите скрыть.

2 голосов
/ 20 декабря 2011

Это невозможно.
К сожалению.

Код, который вызывает Assembly.GetTypes(), обычно должен фильтровать только для public типов.

0 голосов
/ 20 декабря 2011

Добро пожаловать в управляемый код.Полная информация о типе необходима для верификатора типа .NET.Только нативный код может быть скрыт от метаданных .NET, и тогда вы отказываетесь от переносимости и разрешений, поддерживаемых чистым MSIL.

...