Debug.Assert появляется в режиме выпуска - PullRequest
17 голосов
/ 11 июня 2010

Все мы знаем, что Debug.Assert не будет скомпилировано в dll при компиляции в режиме выпуска. Но по какой-то причине Debug.Assert появился в версии выпуска компонента, который я написал. Я подозреваю, что мог испортить настройку csproject.

Есть идеи, почему Debug.Assert появляется в режиме релиза?

P / S: Я дважды проверил, чтобы убедиться, что я действительно компилировал в режиме релиза, прежде чем задавать этот вопрос.

Примечание 2: Я дважды проверил свой csproject и обнаружил, что в конфиге Release, константа Define DEBUG не отмечена, указывая, что для этой части мои настройки верны.

Ответы [ 6 ]

28 голосов
/ 11 июня 2010

Проверьте свойство DefineConstants в файле проекта, оно должно быть:

  • <DefineConstants>DEBUG;TRACE</DefineConstants> для Отладка конфигурация
  • <DefineConstants>TRACE</DefineConstants> для Выпуск Конфигурация

Убедитесь, что в вашем коде нет #define DEBUG.

14 голосов
/ 11 июня 2010

я узнал ответ;Это связано с тем, что препроцессор #define DEBUG определен в начале файла CS внутри проектаУдаление его решает проблему

11 голосов
/ 11 июня 2010

Помните, что «Release mode» - это просто конфигурация сборки с name «Release».Это не обязательно подразумевает что-либо об используемых настройках компиляции: вполне возможно создать конфигурацию под названием «Release», которая фактически компилирует все с настройками отладки.Или, на самом деле, вообще ничего не компилируется!

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

О возможности, о которой еще не говорилось: в VS, если вы выпадаете в выпадающем списке конфигурации сборки (где обычно выбираете «Отладка» или «Выпуск») и выбираете «Диспетчер конфигурации», вы можете увидеть, что собирает каждое решениеСредства настройки для каждого из ваших проектов.Вы заметите, что, например, вы можете настроить сборку «Release» для решения, чтобы по-прежнему собирать некоторые компоненты в режиме отладки, если хотите.

4 голосов
/ 11 июня 2010

Вы проверили файл проекта?Определить константы НЕ должны содержать DEBUG

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
1 голос
/ 11 июня 2010

В дополнение к тому, что сделали madgnome и rdkleine, вы также можете проверить, что, когда решение настроено на сборку в режиме выпуска, ваш проект также настроен на сборку в режиме выпуска.Возможно построить проект в режиме отладки, когда выпуск установлен на уровне проекта.

Для этого щелкните правой кнопкой мыши в VS Solution Explorer на решении и выберите Configuration Manager.Убедитесь, что для «Конфигурации активного решения» выпуска, который вы проектируете, написано «выпуск, а не отладка» для его конфигурации.

Если это все еще не проливает свет, то вы можете добавить кусок кода, окруженный "#if DEBUG"и посмотрим, скомпилируется ли это?

1 голос
/ 11 июня 2010

Используете ли вы какой-либо процесс сборки, такой как Nant или MSBuild, или даже проект веб-развертывания?

Кроме того, убедитесь, что в режиме выпуска перейдите в свойства своего проекта и убедитесь, что «Определить константу отладки» не установлен.

...