Когда #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 в вопросе из папки отладки?
- Любые другие обстоятельства, о которых я забыл упомянуть?
Ответы
Ответ 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, поскольку большинство разработчиков знают это... но иногда игнорируются и приводят к путанице, почему выше код работает неправильно.