По поводу перекомпиляции с подключенными событиями...
Подписываемся на событие (например, Application.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;).
Событие отрабатывает нормально.
Меняем код, перекомпилируем.
Отписаться от старого события уже не можем (Application.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;), ничего не происходит (исключение, например).
Подписываемся на новую версию события (Application.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;)
Получаем отработку двух версий одного события.
Отписываемся от события (Application.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
Получаем отработку только старой версии события.
Ещё раз отписываемся (Application.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;), ничего не меняется, работает старая версия события.
Если в старом событии есть вызов метода f1 в этом же типе, то при его (метода f1) изменении работает старая версия метода f1.
Итого получается после перекомпиляции старая реализация не заменяется. Новая реализация "лежит" рядом. Если были ссылки на методы (и, думаю, другое) в старой реализации они остаются и корректно ссылаются на старую реализацию. При получении ссылок после перекомпиляции, "выдаются" ссылки на новую реализацию.
Ничего не обрушилось. Наверное где-то в МСДН об этом написано. Всё ведь делается штатными средствами, без всякого хака.