Модификаторы области - PullRequest
0 голосов
/ 15 марта 2011

У меня есть 2 проекта:

  1. Библиотека классов, в которой содержатся мои классы / бизнес-логика
  2. Приложение WPF, использующее библиотеку классов (DLL)

Мне было поручено скрыть все функции и классы библиотеки классов, чтобы они не могли быть вызваны или использованы внешними приложениями.

Моя проблема в том, что приложение WPF является «внешним приложением».

Я изменил все модификаторы области видимости Public для всех классов и свойств на Friend.

I тогдапопытался объединить оба проекта в одно решение ... которое, конечно, не сработало.В рамках решения, содержащего оба проекта, я также попытался изменить «сборку» библиотеки классов, чтобы она соответствовала WPF (поскольку «Friend» позволяет коду внутри одной и той же сборки использовать его) ... но это тоже не работает.

Кто-нибудь знает способ сделать это?

Спасибо

-Фринни

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

Если это разные сборки, то прямого способа сделать это нет.Вы можете стать немного дерзким с InternalsVisibleToAttribute, но это немного глупо.

Честно говоря, вы не можете остановить внешний код, вызывающий ваши методы, если вы не пойдете в крайности.Вредоносное приложение может просто пройти мимо любых модификаторов с отражением, если они захотят (поскольку приложение вызывает , вы, вероятно, владеете доменом приложения, оно может утверждать полное доверие),Существует некоторая поддержка для безопасности / разрешений для вызывающего абонента, но обычный материал в значительной степени отключен "полным доверием" - вам необходимо проверить вызывающего абонента самостоятельно.Не стоит, ИМО.Тем более, что начиная с версии 4.0 права доступа к коду больше не используются (см. MSDN )

1 голос
/ 15 марта 2011

Используйте атрибут InternalsVisibleTo .

1 голос
/ 15 марта 2011

вы должны иметь возможность установить атрибут InternalsVisibleTo , чтобы внутренние классы были видны вашему приложению WPF, и это позволит ему все равно их видеть, но другие приложения не смогут.

Некоторая помощь с этим здесь

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

...