Будет ли #if RELEASE работать как #if DEBUG работает в C #? - PullRequest
258 голосов
/ 03 февраля 2009

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

Ответы [ 10 ]

369 голосов
/ 03 февраля 2009

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

#if (!DEBUG)
  ...
#endif
253 голосов
/ 03 февраля 2009

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

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

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

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

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

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

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

36 голосов
/ 03 февраля 2009

Неа.

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

Выбор [Определить постоянную отладки] в Проект -> Сборка подобен включению #define DEBUG в начале каждого файла.

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

  • Свойства проекта -> Сборка
  • Выбор режима разблокировки
  • в текстовом поле Условные символы компиляции введите: RELEASE
24 голосов
/ 03 февраля 2009

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

Пример:

#if !DEBUG
SendTediousEmail()
#endif
9 голосов
/ 03 февраля 2009

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

#if (DEBUG == FALSE)

и

#if (!DEBUG)

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

6 голосов
/ 24 октября 2016

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

4 голосов
/ 15 марта 2009

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

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

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

2 голосов
/ 15 сентября 2016

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

Если затем на вкладке «Построение» на странице свойств проекта вы установите для «Условных символов компиляции» значение TEST (например), вы можете использовать такую ​​конструкцию, как

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

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

0 голосов
/ 11 февраля 2019

Вы можете создавать свои собственные условные символы времени компиляции (любое имя, которое вам нравится). Перейдите в «диалог построения проекта», расположенный в окне свойств проекта, опция меню: Проект -> [имя проекта] Свойства ...

Вы также можете определить их "в верхней части файла кода C #". Как:

#define RELEASE
// or
#undef RELEASE

вы можете использовать символ в выражении #if:

#if RELEASE
// code ...
#elif …
// code ...
#endif

// or

#if !RELEASE
// code ...
#endif
0 голосов
/ 03 февраля 2009

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

#if RELEASE
#undef DEBUG
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...