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

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

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

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

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

Ответ 1

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

Ответ 2

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

  • <DefineConstants>DEBUG;TRACE</DefineConstants> для конфигурации Отладка
  • <DefineConstants>TRACE</DefineConstants> для конфигурации Release

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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