Как я могу определить момент «Редактировать и продолжить» в моем приложении? - PullRequest
1 голос
/ 27 марта 2019

Я занимаюсь разработкой приложения .NET, которое рисует некоторую информацию на экране. Во время разработки очень удобно использовать функцию «Редактировать и продолжить» в Visual Studio, чтобы внести небольшие изменения в код и сразу же отобразить его на экране. Проблема в том, что перерисовка экрана должна запускаться вручную, и я не знаю, когда произошло «Редактировать и продолжить».

Мое приложение на самом деле является плагином большой сторонней системы, и инициализация (запуск приложения) занимает некоторое время, поэтому слишком дорого просто прекратить отладку и перезапускать каждое небольшое изменение. Я хотел бы как-то «поймать» момент, когда код был изменен в моем работающем приложении, и вызвать обновление экрана, чтобы иметь какое-то «живое обновление».

Механизм «Редактировать и продолжить», по-видимому, исправляет код непосредственно в памяти, поэтому отслеживание изменений файла на диске ничего не дает. Я даже зашел так далеко, что перечислил страницы памяти процесса, чтобы обнаружить изменения в разделе кода, но ... Структура памяти процесса CLR оказалась очень сложной (особенно в режиме отладки), так что я не смог найти рабочее решение ... В «родное» приложение C ++, которое можно периодически вычислять контрольной суммой раздела кода в памяти, но в приложении .NET это не так просто. Найти измененный код в памяти нелегко, потому что сгенерированный CLR код x86 разбросан по разным страницам (в отличие от «обычного» собственного процесса).

Я готов зайти так далеко, чтобы интегрировать какое-то решение для взаимодействия Visual Studio, использовать его API для мониторинга этого события ... но с моим (ограниченным) исследованием VS SDK не смог найти API, который дает только это ...

Итак ... есть ли ЛЮБОЙ способ (даже "хакерский") для обнаружения в моем работающем приложении, когда происходит "Редактировать и продолжить"? Должно быть некоторое «событие» CLR, которое происходит, когда Visual Studio внедряет модифицированный код ... или некоторые другие изменения в памяти запущенного приложения (например), которые могут быть обнаружены. Любые низкоуровневые манипуляции (например, перехват API) допустимы, если они будут работать согласованно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...