Проверка того, содержит ли имя модуля текущего процесса строку «.vshost», является лучшим способом, который я нашел, чтобы определить, работает ли приложение из VS IDE.
Использование свойства System.Diagnostics.Debugger.IsAttached тоже нормально, но оно не позволяет вам различать, запускаете ли вы EXE через VSE IDE Run или если вы запускаете отладочную сборку напрямую (например, с помощью проводника Windows или ярлыка), а затем присоединяетесь к ней с помощью VS IDE.
Вы видите, что однажды я столкнулся с проблемой (* связанной с COM) Ошибка выполнения данных Ошибка, которая потребовала от меня запустить Событие после сборки , которое должно выполнить editbin.exe с параметром / NXCOMPAT: NO в сгенерированном VS EXE-файле.
По какой-то причине EXE не был изменен, если вы просто нажмете F5 и запустите программу, и, следовательно, AccessViolationExceptions произойдет в коде, нарушающем DEP, при запуске из VS IDE - что делает его чрезвычайно сложным для отладки. Тем не менее, я обнаружил, что если я запускаю сгенерированный EXE-файл через ярлык, а затем присоединяю отладчик VS IDE, я могу затем протестировать свой код без возникновения AccessViolationExceptions.
Итак, теперь я создал функцию, которая использует метод "vshost", который я могу использовать, чтобы предупредить или заблокировать запуск определенного кода, если я просто выполняю свои ежедневные задачи программирования из VS IDE.
Это предотвращает возникновение этих неприятных исключений AccessViolationException и, таким образом, приводит к фатальному сбою приложения, если я случайно попытаюсь запустить что-то, что, как я знаю, вызовет у меня горе.