Препроцессор в C # не работает - PullRequest
8 голосов
/ 22 февраля 2011
#if(DEBUG)
    ......Code......
#else
    ......Code......
#endif

У меня есть такой код.если мое приложение работает в режиме отладки, оно должно выполнить #if(DEBUG) часть, если оно работает в режиме выпуска, оно должно выполнить #else часть.но независимо от того, в каком режиме он работает, он выполняет #if(DEBUG) только часть.

Использую приложение WPF с VS2010

Кто-нибудь может мне помочь?

Ответы [ 5 ]

15 голосов
/ 22 февраля 2011

Для конфигурации отладки настройки вашего проекта должны выглядеть так:

enter image description here

Для релиза они должны выглядеть следующим образом

enter image description here

Можете ли вы проверить, что это так, и дайте нам знать, если это так?
Если нет, что там для каждой конфигурации?

3 голосов
/ 22 февраля 2011

Создайте новый проект, используя все настройки по умолчанию, и убедитесь, что вы можете сделать так, как вы ожидаете. Если это так, ваш проблемный проект должен быть каким-то образом «поврежден», возможно, путем определения константы DEBUG в конфигурации выпуска или путем выбора конфигурации проекта отладки для конфигурации решения выпуска.

1 голос
/ 23 июня 2012

Это зависит от того, как вы создаете свои конфигурации.Например, если вы создаете свою конфигурацию и используете отладку или выпуск в качестве шаблона, DEBUG или RELEASE будут скопированы в определенный элемент ограничений.Он не изменит определенный элемент ограничений (в файле проекта) на новое имя конфигурации.

Откройте файл проекта и найдите разделы конфигурации.Убедитесь, что у платформы, в приведенном ниже примере это «PROD», есть запись в элементе DefineConstants.Если это произойдет, директивы прекомпилятора не будут работать должным образом в коде.

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PROD|x86'">
  <DefineConstants>PROD;TRACE</DefineConstants>
    <OutputPath>bin\x86\PROD\</OutputPath>
  </PropertyGroup>
0 голосов
/ 22 февраля 2011

Почему вы ставите DEBUG между скобками?

#if DEBUG
    Code
#else
    Code
#endif
0 голосов
/ 22 февраля 2011

Я предполагаю, что в свойствах вашего проекта в разделе Build вы отметили Define DEBUG constant.

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

Если Define DEBUG constant это , а не проверено, это означает, чтоу вас #define DEBUG скрывается где-то.

Итак, нужно сделать две вещи.Проверьте константу в опциях в режиме Release и проверьте наличие любой определенной вручную константы.Это должен быть один из них.

...