Поэтому мой вопрос заключается в том, возможно ли имитировать динамическую область действия в .NET с помощью отражения.
Отражение позволяет во время выполнения манипулировать элементами, которые выражены в метаданных сборки .
Локальные переменные не являются элементами, выраженными в метаданных сборки.
Поэтому ответ на ваш вопрос «нет».
(Как) возможно ли надежно получить доступ к локальным объектам вызывающих методов?
Устройство, которое обращается к локальным объектам вызывающего метода, называется «отладчиком». Поэтому ответ на ваш вопрос «напишите себе отладчик».
Обратите внимание, что отладчики не надежно обращаются к локальным пользователям в мире с оптимизацией кода. Локальные данные могут быть оптимизированы, джиттер может генерировать код, который использует один и тот же регистр для двух разных локальных объектов, стековые кадры могут быть повторно использованы во время оконечных вызовов и т. И, конечно же, вам лучше иметь файл PDB, который сообщает отладчику имена, связанные с каждым местоположением стекового фрейма.
Ваш метод должен был бы запустить ваш собственный отладчик как новый процесс, а затем подождать, пока отладчик отправит ему сообщение. Затем отладчик приостанавливает потоки исходного процесса, выполняет опрос кадров стека и затем возобновляет потоки процесса. Затем он будет отправлять сообщения отладчику, которые содержат информацию, которую вы обнаружили. Поскольку отладчик находится в состоянии ожидания в ожидании сообщений, он затем возобновит свою работу.
Если вам нужна in-process «eval», рассмотрите JScript.NET, язык, который был разработан для такого рода вещей.