Ответ 1
HttpContext.IsDebuggingEnabled
относится к настройке компиляции в web.config. Debugger.IsAttached
определяет, действительно ли активный отладчик прослушивает информацию, поступающую с веб-сервера.
См. объяснение в DotnetPerls в отношении HttpContext.IsDebuggingEnabled
:
Режим отладки не является значением по умолчанию.... Когда вы не устанавливаете debug = "true" в Web.config, сайт компилируется в режиме Release.
Что касается вашего вопроса, почему первый "только для веб-приложений": веб-приложения могут компилироваться во время выполнения, тогда как все остальные .NET-продукты предварительно скомпилированы. Из-за этого вы можете определить в web.config, если сборка выполняется в режиме отладки или выпуска. Это только вариант ASP.NET, поэтому свойство доступно только там.
Как ответ на ваш второй вопрос, почему первый вариант предназначен только для ASP.NET: есть также способ для приложения Windows проверить статус сборки: путем проверки DebuggableAttribute
, как описано в Как проверить, была ли сборка построена с использованием конфигурации Debug или Release?.