Подтвердить что ты не робот

Когда #if выполняется DEBUG

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

#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 в вопросе из папки отладки?
  • Любые другие обстоятельства, о которых я забыл упомянуть?
4b9b3361

Ответ 1

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

Он компилируется, когда вы определяете константу DEBUG. И да, это по умолчанию в настройке Debug Build Configuration.

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

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

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

Else (не проверено) VS будет компилировать:

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

введите описание изображения здесь

Ответ 7

Перейдите в "Свойства проекта" → вкладка "Создание" приложения. Если конфигурация Configuration: Active (Debug), то включена настройка Debug. Ниже код будет печатать на консоли.

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

Если Configuration: Active (Release), то включена настройка Release. Код для печати будет печатать на консоли.

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

Если вы хотите переключиться между режимами DEBUG и RELEASE, используйте "Debug/Release/Configuration Manager", который выйдет прямо под меню Tools.Apologies, поскольку большинство разработчиков знают это... но иногда игнорируются и приводят к путанице, почему выше код работает неправильно.