Как проверить запущено ли ASP.NET приложение в режиме отладки?
Иногда очень хочется знать, запущено ли ASP.NET приложение под отладчиком или работает на боевом сервере, например для того, чтобы определиться, какой код генерировать на странице или в элементе управления, подменить версию .js / .css файла для разработки на пожатую для боевого сервера и т.д. Для этого существуют два способа – очевидный и честный.
Очевидный способ – воспользоваться информацией из web.config (<compilation debug="true" />):
if ( HttpContext.Current.IsDebuggingEnabled ) { GenerateDebugScript(); } else { GenerateReleaseScript(); }
Однако, этот способ не является корректным, если у самой ASP.NET страницы установлена директива Debug="true" – в этом случае страница будет в режиме отадки, даже если в web.config указано обратное compilation debug="false".
Честный способ – узнать о реальном положении дел на уровне сборки:
if ( Assembly.GetExecutingAssembly().IsDefined(typeof(DebuggableAttribute)) ) { GenerateDebugScript(); } else { GenerateReleaseScript(); }
В этом случае мы точно знаем, что работаем с версией для отладки.
Comments
Anonymous
March 17, 2009
Гм, а чем не устраивает такой вариант: if (Debugger.IsAttached) GenerateDebugScript(); else GenerateReleaseScript();Anonymous
March 17, 2009
Гм, а чем не устраивает такой вариант: if (Debugger.IsAttached) GenerateDebugScript(); else GenerateReleaseScript();Anonymous
March 17, 2009
Нет, поскольку это свойство говорит лишь о присувии Debugger. Мы можем запустить отладочную версию и без отадчика (например, только для отладки клиенстких скриптов).