2013-02-27 2 views
1

Я хочу получить информацию о полях, функциях и потоках какого-либо проекта, через другой проект.C# Отражение во время выполнения

В качестве примера проект, который я хочу исследовать, я создал поле Int х, который инициализирует до 1. Главный вызов функции, которая изменяет значение х до 2. я застрял Главное в бесконечном цикле. Я управлял этим проектом.

Второй проект: Получить путь к файлу EXE первого проекта и загрузить сборку. Отражением я получил имена отделов, функций и полей. Я попытался напечатать значение поля x функцией getValue. Вместо печати 2 было напечатано 1. т. Е. Отражение относится к значениям скомпилированного времени, а не времени выполнения.

Что мне делать?

+0

Вы имеете в виду, что вам нужно динамически опросить другую сборку? – Dreamwalker

+3

Это не то, что означает отражение в мире .NET. Я бы рекомендовал назвать это чем-то другим. – Euphoric

+2

Загрузка сборки не запускает код. Вы не выполнили свой 'Main' и, таким образом, никогда не обновляли' x'. Вы пытаетесь получить доступ к значениям в памяти из совершенно другого процесса, и это совсем другой чайник из рыбы. =) –

ответ

4

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

С помощью Reflection вы можете загрузить эту сборку, создать экземпляр этого класса и вызвать Main явно, а затем проверить значение int, потому что тогда код будет выполняться вашим процессом.

Не стоит рассчитывать на возможность вынюхивать значения из пространства памяти другого приложения с помощью Reflection, это не то, что делает Reflection.

+0

Я добавил поток, который вызвал основной класс, но он все еще не работает. :( –

+0

@OrKedmi Почему отдельный поток? Попробуйте загрузить сборку, создать экземпляр, вызвать метод Main и после его завершения получить значение поля и увидеть. Оно должно показать новое значение 2. – dutzu

+0

Пока выполняется первый проект, я хочу проверить каждый интервал времени значение X .. Нет смысла ждать, пока он не закончит. –

Смежные вопросы