Если вы не используете отладочную сборку, код исключается компилятором. Сигнатура метода имеет нечто похожее на:
[Conditional("DEBUG")]
public static void WriteLine(string message) { }
Этот атрибут указывает компилятору только включать вызовы для рассматриваемого метода при выполнении отладочных сборок. Поэтому, если вы не компилируете с установленным флагом DEBUG (скажем, сборкой релиза), то компилятор вообще отбросит вызов.
То же самое верно для Debug.Assert
.
Вы также можете использовать этот атрибут в своем собственном коде с любой понравившейся вам меткой.
Еще один способ думать об этом атрибуте состоит в том, что он заставляет все вызовы метода, имеющего атрибут, быть заключенным в директивы - что-то вроде:
DoSomething();
#if DEBUG
Debug.WriteLine("I'm a debug build");
#endif
DoSomethingElse();
EDIT
Чего вы пытаетесь достичь с помощью Environment.UserInteractive
? Возможно, вы имеете в виду Debugger.IsAttached
? Если вы хотите проверить, является ли это отладочной сборкой, вы можете использовать директивы ConditionalAttribute
, как указано выше, или #if #endif
.