Будет ли # if RELEASE работать как #if DEBUG в C#?
во всех примерах, которые я видел в директиве компилятора #if, они используют "DEBUG". Могу ли я использовать "RELEASE" таким же образом, чтобы исключить код, который я не хочу запускать при компиляции в режиме отладки? Код, который я хочу окружить этим блоком, отправляет кучу писем, и я не хочу случайно отправлять их при тестировании.
10 ответов
нет, не будет, если вы не сделаете какую-то работу.
важной частью здесь является то, что на самом деле представляет собой DEBUG, и это своего рода константа, определенная компилятором.
Если вы проверите свойства проекта, на вкладке сборка вы найдете три вещи:
- текстовое поле с надписью "символы условной компиляции"
- флажок с надписью "определить константу отладки"
- флажок с надписью " определить трассировку константа"
нет такого флажка, ни константы / символа, предварительно определенного с именем RELEASE.
однако вы можете легко добавить это имя в текстовое поле, помеченное условными символами компиляции, но перед этим убедитесь, что вы установили конфигурацию проекта в режим выпуска, так как эти параметры относятся к конфигурации.
Итак, в основном, если вы не добавите это в текстовое поле,#if RELEASE
не произведет никакой код под любым конфигурация.
редактировать: исправлено #ifdef в #if (спасибо Daniel)
Неа.
в то время как в конфигурации отладки есть DEBUG
определенная константа (автоматически определяемая Visual Studio), пока такая константа не определена для режима выпуска. Проверьте настройки проекта в разделе build.
выбор [определить константу отладки] в разделе -6-->Построить похоже на включение #define DEBUG в начале каждого файла.
Если вы хотите определить константу выпуска для конфигурации выпуска, перейдите кому:
- Свойства Проекта - > Build
- Выберите Режим Выпуска
- на условная компиляция символов текстовое поле enter: RELEASE
на моем VS install (VS 2008) #если выпуск не работает. Однако вы можете просто использовать !DEBUG
пример:
#if !DEBUG
SendTediousEmail()
#endif
"Pop Catalin" правильно понял. Управление определением на основе типа сборки обеспечивает большую гибкость. Например, вы можете иметь конфигурацию "DEBUG", "DEMO" и "RELEASE" в одном и том же решении. Это предотвращает необходимость дублирования программирования с двумя различными решениями.
Да #if RELEASE
или #if (RELEASE)
работает так же, как #if DEBUG
когда определен символ условной компиляции выпуска.
следующее взято из " Pop Catalin" должность: Если вы хотите определить константу выпуска для конфигурации выпуска, перейдите к: * Проект Свойства -> Построить * Выберите Режим Выпуска * в условная компиляция символов текстовое поле enter: RELEASE
Я знаю, что это старый вопрос, но, возможно, стоит упомянуть, что вы можете создавать свои собственные конфигурации вне отладки и выпуска, такие как TEST или UAT.
Если затем на вкладке сборка страницы свойств проекта вы затем установите "условные символы компиляции" для тестирования (например), вы можете использовать конструкцию, такую как
#if (DEBUG || TEST )
//Code that will not be executed in RELEASE or UAT
#endif
вы можете использовать эту конструкцию по определенной причине, например, для разных клиентов, если у вас есть необходимость, или даже для всего интернета Например, методы. Мы также использовали это в прошлом, когда некоторые команды вызывали проблемы на конкретном оборудовании, поэтому у нас есть конфигурация для приложения при развертывании на оборудовании X.
просто к сведению. Я уверен, что #if DEBUG удаляется из компиляции выпуска, когда оптимизированная сборка включена.