Можно ли пропускать проверки видимости при генерации динамического IL с помощью метода MethodBuilder?
При генерации IL с помощью DynamicMethod можно вызвать методы и поля доступа, которые в противном случае были бы недоступны, если вы предоставите "true" для параметра limitedSkipVisibility в Конструктор DynamicMethod
Я бы предпочел испускать динамический ИЛ в динамическую сборку, чтобы я мог сохранить сгенерированный ИЛ в сборку во время сборки. Если я использую этот метод, я должен использовать MethodBuilder вместо DynamicMethod. Однако мне нужно пропустить проверки видимости, поэтому я не получаю MethodAccessException при запуске моего динамического кода. Есть ли способ сделать это, и если да, то как?
Ответы
Ответ 1
При использовании MethodBuilder в динамических сборках вы привязаны к тем же правилам, что и сборщики, сгенерированные компилятором. Таким образом, видимость между сборками определяется следующим образом:
Прочтите документацию и образцы, чтобы узнать, может ли она соответствовать вашим потребностям.
Ответ 2
если вам нужно материализовать свой сгенерированный код через интерфейс вместо делегирования, il будет полезен для skipVisibilityCheck для Methodbuilder. Я не нашел способ сделать это напрямую, но вы можете просто вызвать DynamicMethod в своем MethodBuilder, используя EmitCalli (OpCodes.Calli...).