Debug.Assert появляется в режиме выпуска

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

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

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

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

6 ответов

Решение

Я узнал ответ; это потому что есть #define DEBUG препроцессор, определенный в начале файла cs внутри проекта. Удаление это решает проблему

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

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

Проверьте, что у вас нет #define DEBUG в вашем коде.

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

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

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

Вы проверили файл проекта? Определить константы НЕ должны содержать 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>

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

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

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

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

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

Другие вопросы по тегам