Быстрый вопрос относительно размышлений и разрешений. .net 2008 - PullRequest
1 голос
/ 17 ноября 2009

У меня есть различные проекты, которые используют отражение для доступа и вызова частных или внутренних членов в некоторых классах платформы.

Все эти проекты отлично работают на моем компьютере (работает на Visual Basic Express 2008), но гарантированно они работают на другом компьютере или, скажем, по сети?

Я посмотрел ReflectionPermission, но я не уверен, нужно ли мне это предоставление или я предоставляю его моему проекту!

Я не так глуп, как звучит этот вопрос, честно!

Ответы [ 3 ]

2 голосов
/ 17 ноября 2009

Если вы можете выполнить код, тогда вы сможете использовать отражение для его опроса.

Из моего прочтения страницы ReflectionPermission MSDN кажется, что вам нужно использовать это, чтобы получить доступ ко всем членам объектов:

Без ReflectionPermission код может использовать отражение для доступа только к открытым элементам объектов. Код с ReflectionPermission и соответствующими флагами ReflectionPermissionFlag могут получить доступ к защищенным и закрытым членам объектов.

2 голосов
/ 17 ноября 2009

Они должны нормально работать на любой машине, если она запускается с локального диска. По умолчанию при запуске исполняемого файла из общего сетевого ресурса в .NET до 3.5SP1 вы будете работать в режиме с ограниченным доверием (в Интернете или в интрасети), и у вас не будет доступа к ReflectionPermission, что означает, что вы не сможете получить доступ к защищенным или частные участники.

Начиная с 3.5SP1, они изменили работу исполняемых файлов, чтобы дать им полное доверие, если они запускаются напрямую (в отличие от загрузки в другой процесс через Assembly.Load и т.п.).

Вы также можете предоставить определенные разрешения сборке, используя инструмент caspol, который является частью каркаса. См. this для получения дополнительной информации о caspol.

2 голосов
/ 17 ноября 2009

Компьютер, на котором работает программа, должен предоставить программе ReflectionPermission.

Это не будет проблемой, если пользователь запускает вашу программу из локальной файловой системы. Это может быть проблемой, если пользователь запускает вашу программу из сетевого ресурса, интрасети, Интернета и т. Д., В зависимости от политик компьютера, на котором выполняется программа. Политики могут также учитывать такие факторы, как исходный URL-адрес или общий ресурс сети, подписана ли программа и т. Д. Например, если это приложение для интрасети, сетевые администраторы могут разрешить высокое доверие к программам, которые происходят из http://our_site/approved_apps/ и подписаны, но не для программ, которые происходят из других частей интрасети или не подписаны.

В любом случае, это вне вашего контроля: ваша сборка может заявить, что ей требуется ReflectionPermission, но предоставлено ли это, зависит от конфигурации целевой системы. (Но, опять же, если ваша программа запускается из локальной файловой системы, это не должно быть проблемой, потому что она будет работать с полным доверием, если кто-то не действительно заблокировал машину.)

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