Почему пропуск проверки видимости разрешен только для динамических методов?

Я портирую код, который широко использует DynamicMethods, чтобы обеспечить предварительную компиляцию для повышения производительности при холодном запуске. Я заметил, что DynamicMethod могут быть JIT-компилированы и выполнены с пропущенными проверками видимости, что позволяет им получить доступ к закрытым вложенным типам, но обычные сборки не могут (или не могут? Я не вижу какой-либо очевидной опции загрузчика). Чем обосновано такое дизайнерское решение?


person cynic    schedule 04.04.2012    source источник
comment
-unity, так как это не связано с Microsoft Unity. Вы можете прочитать этот пост в блоге, davedewinter.com/ 2010/11/21/ Для этого требуются определенные разрешения. Поэтому, если вы хотите ограничить такие попытки, вы можете.   -  person Lex Li    schedule 22.04.2013


Ответы (1)


Мне нужно немного размахивать руками, отвечая на этот вопрос, CAS вечно сложен. Аргумент skipVisibility относится к доверенным хост-приложениям, которые генерируют код, который выполняется в песочнице. В таком случае нецелесообразно выполнять проверки при создании метода, поскольку среда выполнения неверна. Это должно произойти, когда метод выполняется внутри песочницы. Где он подвергается обычным проверкам CAS, выполняемым песочницей.

Присвоение аргументу значения true фактически добавляет требование разрешения для ReflectionPermissionFlag.MemberAccess, необходимое для попытки получения сгенерированного метода.

С ног на голову. Некоторая справочная информация содержится в этой статье MSDN, "Добавление RestrictedMemberAccess к изолированным доменам". " раздел.

person Hans Passant    schedule 10.06.2013