Есть ли способ полностью отключить редактирование и продолжение?

Мне было интересно, есть ли способ полностью заблокировать мой код во время его отладки в Visual Studio 2008. Документы кода автоматически блокируются при запуске в качестве 64-битных приложений, что я очень предпочитаю; тем не менее, я делаю большую часть своих надстроек для написания кода для Excel, который является 32-битным. В результате, несмотря на то, что я нацеливаюсь на AnyCPU, хост VS знает, что он работает в 32-битном процессе, и, следовательно, исходный код не блокируется во время выполнения кода, размещенного в Visual Studio.

Я могу отключить "Редактировать и продолжить", выбрав "Инструменты"> "Параметры"> "Отладка"> "Редактировать и продолжить", а затем сняв флажок "Включено для редактирования и продолжения". Это не полностью блокирует код, однако. Это предотвращает выполнение любых изменений в коде в текущем цикле, но не предотвращает фактическое изменение кода щелчками мыши или нажатиями клавиш.

Опять же, при работе с 64-битными приложениями этого не происходит - код полностью заблокирован. Я предпочитаю, чтобы код был полностью заблокирован, по крайней мере, по нескольким причинам:

  1. Я могу случайно нажать клавишу или что-то подобное во время отладки, что я определенно не хочу делать. Это редко, но это проблема.

  2. Многие из моих автоматических тестов управляют пользовательским интерфейсом через SendKeys. Однако при прохождении такого теста с использованием отладчика я иногда могу забыть, что некоторые из аспектов связаны с SendKeys, что означает, что нажатия клавиш заканчиваются отправкой в ​​IDE Visual Studio вместо Excel.

В выпуске № 2, выше, модульное тестирование завершается неудачно, и это нормально - плохо, но отправка всех нажатий клавиш в модуль кода и уничтожение моего кода совершенно неприемлемы.

У кого-нибудь есть здесь идеи? Можно ли полностью заблокировать код при запуске в Visual Studio при компиляции на 32-битном процессоре?

Некоторые связанные посты по этому вопросу, но ни один из которых не касается непосредственно этого:

Заранее спасибо за любую помощь или идеи...

Майк

3 ответа

Решение

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

По сути, метод заключается в том, чтобы при запуске приложения установить для файлов вашего проекта значение "Только чтение", а затем по окончании работы приложения вернуть их в режим записи.

Однако в VS2k8 по умолчанию установка файла только для чтения позволяет редактировать файл. Сначала необходимо отключить параметр "Разрешить редактирование файлов только для чтения..." в меню "Инструменты"> "Параметры"> "Среда"> "Документы".

Во-вторых, вам нужно добавить следующий ключ в реестр как DWORD и установить его значение в 1:

HKCU\Sofware\Microsoft\Visual Studio\9.0\Source Control\UncontrolledInMemoryEditDialogSuppressed  

Это все еще не будет работать полностью. Затем вам нужно установить для Source Control для этого проекта значение Visual Source Safe. (<- это шаг, который, я полагаю, вам не понравится.)

Затем перезапустите VS2k8.

На этом этапе, если вы установите один из ваших файлов только для чтения, вы увидите, что Visual Studio вообще не позволит вам редактировать этот файл. Когда вы пытаетесь, он играет музыку исключений вашего компьютера.

Теперь, чтобы сделать ваши файлы доступными только для чтения при запуске приложения, установите для этого процесс после сборки. Это легко.

Сложнее - вернуть их в режим записи после завершения работы приложения. Самым простым решением, вероятно, является ярлык командного файла.

Вот трюк, который я использую в Visual Studio 2005 (у меня нет возможности протестировать в Visual Studio 2008, но он должен работать):

  • Откройте свойства исполняемой сборки
  • Перейти на вкладку " Отладка "
  • Установите флажок Включить отладку неуправляемого кода.

Документы кода должны оставаться заблокированными даже при достижении точки останова, и любая попытка изменить ее должна вызывать всплывающее окно, в котором говорится: "Изменения не допускаются, если включена неуправляемая отладка".

Привет - извините, я не могу помочь вам с полной блокировкой вашего кода - у меня есть противоположное желание: полностью разблокировать его во время отладки, но я могу помочь вам с вашей второй проблемой.

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

Я знаю, что это не то решение, которое вам нужно, но, вероятно, не мешало бы предотвратить другие подобные проблемы.

Удачи!

Адам

Другие вопросы по тегам