Как использовать отражение, чтобы создать "машину отражения"
Хорошо, так что название немного отстой, но я не мог придумать ничего лучше (может, кто-то еще может?).
Итак, у меня есть несколько вопросов по теме здесь. Я хочу создать программу, которая может взять объект и использовать отражение, чтобы перечислить все его свойства, методы, конструкторы и т. Д. Затем я могу манипулировать этими объектами во время выполнения, чтобы протестировать, отладить и выяснить, что именно некоторые из моих классов / программы работают во время их работы (некоторые из них будут службами Windows и, возможно, будут установлены на компьютере, а не запущены в режиме отладки из VS).
Таким образом, я бы предоставил хук программе, чтобы с локальной машины (только) эта программа могла получить экземпляр основного объекта и, следовательно, увидеть все подчиненные объекты, работающие в нем. (для безопасности может потребоваться запустить программу с аргументом arg, чтобы открыть этот хук).
"Машина отражения" позволила бы манипулировать во время выполнения и допросить.
Возможно ли это звучит?
Должна ли программа предоставить хук или "машина отражения" может взять EXE и (если она знает все используемые классы) создать объект для использования?
Я знаю, что вы можете импортировать DLL во время выполнения, чтобы он знал обо всех видах классов, но можете ли вы импортировать отдельные классы? IE Скажем, у меня есть проект 'Y', который не скомпилирован в DLL, но я хочу использовать на нем "машину отражения", могу ли я указать на этот каталог и взять файлы, чтобы иметь возможность ссылаться на эти классы?
РЕДАКТИРОВАТЬ: Я хотел бы попробовать и развивать его сам, но у меня уже есть длинный список проектов, которые я хотел бы сделать и уже начал. Зачем изобретать велосипед, когда уже есть большой выбор на выбор.
4 ответа
Попробуйте посмотреть на Crack.NET. Он используется для манипулирования во время выполнения и опроса в WPF/WinForms, но источник доступен и может быть хорошим началом, если он уже не соответствует вашим потребностям.
Звучит так, как будто Соколиный Глаз Корнелиу Туснеа может быть близок к тому, что вы ищите во время выполнения запроса объектов / свойств / и т. Д. Он называет это.NET Runtime Object Editor. Я не уверен, лучше ли начинать с домашней страницы, на которую я ссылался выше, или проекта CodePlex.
Я думаю, это немного устарело, но в CodeProject есть более ранняя его версия, где вы можете увидеть исходный код того, как и что он сделал.
Powershell фактически делает почти все это, если я правильно понимаю, что вы говорите.
Посмотрите этот ответ о том, как построить "двигатель отражения".
Все, что вам нужно сделать, это добавить этот набор машин в ваш набор доступных библиотек времени выполнения, и он, я думаю, будет делать то, что вы хотите. (Это может быть не так просто, как я это озвучил на практике).
Я предполагаю, что вам также понадобится компилятор времени выполнения, чтобы вы могли производить инструментированные / преобразованные варианты проверяемой программы для сбора необходимых данных времени выполнения. Вы можете обнаружить, что такой механизм предоставляет результаты статического анализа, что позволяет вам избежать выполнения анализа во многих случаях.