Будет ли # RELEASE работать, как #if DEBUG делает в С#?

Во всех примерах, которые я видел в директиве компилятора #if, они используют "DEBUG". Можно ли использовать "RELEASE" таким же образом, чтобы исключить код, который я не хочу запускать при компиляции в режиме отладки? Код, который я хочу окружить этим блоком, отправляет кучу писем, и я не хочу случайно отправлять их при тестировании.

Ответ 1

Нет, не будет, если вы не поработаете.

Важной частью здесь является то, чем на самом деле является DEBUG, и определенная константа, с которой может проверить компилятор.

Если вы проверите свойства проекта, на вкладке Build вы найдете три вещи:

  • Текстовое поле с надписью "Условные символы компиляции"
  • Флажок с надписью "Определить постоянную отладки"
  • Флажок с надписью "Определить константу TRACE"

Нет такого флажка, ни предопределенной константы/символа с именем RELEASE.

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

Таким образом, в основном, если вы не добавите это в текстовое поле, #if RELEASE не будет генерировать никакого кода при любой конфигурации.

Ответ 2

RELEASE не определен, но вы можете использовать

#if (!DEBUG)
  ...
#endif

Ответ 3

Неа.

В конфигурации отладки существует константа DEBUG (автоматически определяемая Visual Studio), в то время как такая константа не определена для режима выпуска. Проверьте настройки проекта в процессе сборки.

Выбор [Define DEBUG constant] в Project → Build похож на включение #define DEBUG в начале каждого файла.

Если вы хотите определить константу RELEASE для конфигурации выпуска, перейдите по адресу:

  • Свойства проекта → Строить
  • Выберите режим деблокирования
  • в текстовом поле символов условной компиляции введите: RELEASE

Ответ 4

На моей установке VS (VS 2008) #if RELEASE не работает. Однако вы можете просто использовать #if !DEBUG

Пример:

#if !DEBUG
SendTediousEmail()
#endif

Ответ 5

Я никогда раньше этого не видел... но я видел:

#if (DEBUG == FALSE)

и

#if (!DEBUG)

Это работает для ya?

Ответ 6

Вы можете использовать #if(!DEBUG) для этих целей.

Ответ 7

"Pop Catalin" понял это правильно. Управление определением, основанное на типе сборки, обеспечивает большую гибкость. Например, вы можете иметь конфигурацию "DEBUG", "DEMO" и "RELEASE" в одном и том же решении. Это предотвращает необходимость дублирования программирования с двумя различными решениями.

Итак, да #if RELEASE или #if (RELEASE) работает так же, как #if DEBUG, когда определен условный символ компиляции RELEASE.

Из записи "Pop Catalin" взято следующее: Если вы хотите определить константу RELEASE для конфигурации выпуска, перейдите по ссылке:   * Свойства проекта → Сборка   * Выберите режим деблокирования   * в текстовом поле символов условной компиляции введите: RELEASE

Ответ 8

Я знаю, что это старый вопрос, но, возможно, стоит упомянуть, что вы можете создавать свои собственные конфигурации вне DEBUG и RELEASE, например TEST или UAT.

Если затем на вкладке "Сборка" на странице свойств проекта вы затем установите "Условные символы компиляции" в TEST (например), вы можете затем использовать конструкцию, такую ​​как

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

Вы можете использовать эту конструкцию по определенной причине, например, для разных клиентов, если у вас есть необходимость, или даже для всех веб-методов. Мы также использовали это в прошлом, когда некоторые команды вызывали проблемы с конкретным оборудованием, поэтому у нас есть конфигурация для приложения при развертывании на аппаратное обеспечение X.

Ответ 9

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

Ответ 10

почему не просто

#if RELEASE
#undef DEBUG
#endif