Я портирую код, который широко использует DynamicMethod
s, чтобы обеспечить предварительную компиляцию для повышения производительности при холодном запуске. Я заметил, что DynamicMethod
могут быть JIT-компилированы и выполнены с пропущенными проверками видимости, что позволяет им получить доступ к закрытым вложенным типам, но обычные сборки не могут (или не могут? Я не вижу какой-либо очевидной опции загрузчика). Чем обосновано такое дизайнерское решение?
Почему пропуск проверки видимости разрешен только для динамических методов?
Ответы (1)
Мне нужно немного размахивать руками, отвечая на этот вопрос, CAS вечно сложен. Аргумент skipVisibility относится к доверенным хост-приложениям, которые генерируют код, который выполняется в песочнице. В таком случае нецелесообразно выполнять проверки при создании метода, поскольку среда выполнения неверна. Это должно произойти, когда метод выполняется внутри песочницы. Где он подвергается обычным проверкам CAS, выполняемым песочницей.
Присвоение аргументу значения true фактически добавляет требование разрешения для ReflectionPermissionFlag.MemberAccess, необходимое для попытки получения сгенерированного метода.
С ног на голову. Некоторая справочная информация содержится в этой статье MSDN, "Добавление RestrictedMemberAccess к изолированным доменам". " раздел.