Я занимаюсь разработкой приложения .NET, которое рисует некоторую информацию на экране. Во время разработки очень удобно использовать функцию «Редактировать и продолжить» в Visual Studio, чтобы внести небольшие изменения в код и сразу же отобразить его на экране. Проблема в том, что перерисовка экрана должна запускаться вручную, и я не знаю, когда произошло «Редактировать и продолжить».
Мое приложение на самом деле является плагином большой сторонней системы, и инициализация (запуск приложения) занимает некоторое время, поэтому слишком дорого просто прекратить отладку и перезапускать каждое небольшое изменение. Я хотел бы как-то «поймать» момент, когда код был изменен в моем работающем приложении, и вызвать обновление экрана, чтобы иметь какое-то «живое обновление».
Механизм «Редактировать и продолжить», по-видимому, исправляет код непосредственно в памяти, поэтому отслеживание изменений файла на диске ничего не дает. Я даже зашел так далеко, что перечислил страницы памяти процесса, чтобы обнаружить изменения в разделе кода, но ... Структура памяти процесса CLR оказалась очень сложной (особенно в режиме отладки), так что я не смог найти рабочее решение ... В «родное» приложение C ++, которое можно периодически вычислять контрольной суммой раздела кода в памяти, но в приложении .NET это не так просто. Найти измененный код в памяти нелегко, потому что сгенерированный CLR код x86 разбросан по разным страницам (в отличие от «обычного» собственного процесса).
Я готов зайти так далеко, чтобы интегрировать какое-то решение для взаимодействия Visual Studio, использовать его API для мониторинга этого события ... но с моим (ограниченным) исследованием VS SDK не смог найти API, который дает только это ...
Итак ... есть ли ЛЮБОЙ способ (даже "хакерский") для обнаружения в моем работающем приложении, когда происходит "Редактировать и продолжить"? Должно быть некоторое «событие» CLR, которое происходит, когда Visual Studio внедряет модифицированный код ... или некоторые другие изменения в памяти запущенного приложения (например), которые могут быть обнаружены. Любые низкоуровневые манипуляции (например, перехват API) допустимы, если они будут работать согласованно.