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



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

680   10  

10 ответов:

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

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

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

  • текстовое поле с надписью "символы условной компиляции"
  • флажок с надписью "определить константу отладки"
  • флажок с надписью " определить трассировку константа"

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

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

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


Edit: исправлено #ifdef в #if (спасибо Даниэль)

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

#if (!DEBUG)
  ...
#endif

Неа.

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

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

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

  • Свойства Проекта -> Построить
  • Выберите Режим Выпуска
  • на условная компиляция символов текстовое поле enter: RELEASE

на моем VS install (VS 2008) #если релиз не работает. Однако вы могли бы просто использовать !Отладка

пример:

#if !DEBUG
SendTediousEmail()
#endif

Я никогда не видел...но я видел:

#if (DEBUG == FALSE)

и

#if (!DEBUG)

это работа для вас?

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

"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 удаляется из release compiles, когда включена оптимизированная сборка.

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

#if RELEASE
#undef DEBUG
#endif

Comments

    Ничего не найдено.