Когда работает #if DEBUG

У меня есть этот код в моем классе C #.

#if DEBUG
        private const string BASE_URL = "http://www.a.com/";
#else
        private const string BASE_URL = "http://www.b.com//";
#endif

То, что я хотел спросить, это когда

#if DEBUG

путь в коде выполняется?

Это выполняется

Когда я запускаю сеанс отладки в Visual Studio?Когда я вручную запускаю exe или dll из папки отладки?Любые другие обстоятельства, которые я забыл упомянуть?
 Olivier Jacot-Descombes18 окт. 2012 г., 19:58
#if DEBUG никогда не запускается, но влияет на компиляцию кода.

Ответы на вопрос(7)

Если вы компилируете с конфигурацией DEBUG, код перед строкой else будет скомпилирован, а другая - нет. Если вы скомпилируете в любой другой конфигурации, вторая строка будет скомпилирована, а первая - нет.

 Justin Self18 окт. 2012 г., 20:11
@RuneFS Хороший вопрос, спасибо.
 Rune FS18 окт. 2012 г., 20:02
Истинно в настройках по умолчанию проектов в VS, но не использует VS или не изменяет настройки, может включать в себя символ DEBUG влюбой конфигурация (включая выпуск, если вы этого хотите)

VS 2017 на самом деле чувствую активную конфигурацию и, например, будетсерый условие отладки, если выбрана конфигурация выпуска.

Решение Вопроса

#if DEBUG Это's определение препроцессора.

Он компилируется, когда вы определяете константу DEBUG. И да, этоПо умолчанию используется конфигурация отладочной сборки.

Свойства проекта Visual Studio 2010: 

ЕслиDefine DEBUG constant Проверено, VS скомпилирует:

private const string BASE_URL = "http://www.a.com/";

Иначе (не проверено) VS скомпилирует:

private const string BASE_URL = "http://www.b.com//";
 robnick08 мар. 2018 г., 02:51
Отличный ответ. Это все еще так в VS2017.

Когда вы компилируете с директивой DEBUG. Так что, если этоЕсли задана только первая строка, она будет частью скомпилированного двоичного файла, и еслине установлено, вторая строка будет частью двоичного файла.

DEBUG по умолчанию устанавливается при компиляции конфигурации отладки в VS, но вы можете установить ее вручную для любой конфигурации

Идти к "Свойства проекта »-> Вкладка «Сборка» приложения. Если Конфигурация: Активна (Отладка), то Конфигурация Отладки включена. Ниже код будет распечатан на консоль.

#if DEBUG
    Console.WriteLine("in debug mode...");
#endif

Если Configuration: Active (Release), то включена конфигурация Release. Ниже код будет выведен на консоль.

#if RELEASE
    Console.WriteLine("in release mode...");
#endif

Если вы хотите переключаться между режимами DEBUG и RELEASE, используйте "Диспетчер отладки / выпуска / конфигурации " выпадающий прямо под меню инструментов. Извинения, как это знает большинство разработчиков ... но иногда упускают из виду и вызывают путаницу, почему вышеуказанный код работает неправильно.

Это "директива компилятора "Это означает, что он будет фактически включать или исключать код из процесса сборки (или компиляции) на основе #if 's, которые вы вводите. При этом символ DEBUG находится в свойствах вашего проекта, а в Visual Studio обычно удаляется автоматически вРелиз" строить.

Так что в основном это неОн должен быть в Visual Studio, работающем в режиме отладки, и не обязательно находиться в какой-то определенной папке, ваш код просто построен таким образом.

Это'Директива препроцессора. Код в части DEBUG компилируется, когда вы выполняете отладочную сборку (более конкретно, когда определена константа DEBUG). То есть если вы выполните отладочную сборку, BASE_URL будет указывать на www.a.com. В противном случае он будет указывать на www.b.com.

Ваш ответ на вопрос