#c# #debugging #release #preprocessor #compiler-directives
Вопрос:
У меня есть проект c# .net core, в котором используются директивы препроцессора ( #if DEBUG) для включения небезопасных SSL-соединений во время отладки. Теперь, когда я выпускаю-создаю весь проект и открываю сгенерированную dll с помощью dotPeek, я все еще нахожу код, окруженный «#if DEBUG». Я бы подумал, что этот код удаляется во время сборки. Я также проверил, что в настройках сборки из VS «определить ОТЛАДКУ» не установлен флажок для конфигурации сборки-выпуска. Является ли мое представление о том, как это работает, неверным ? Где в .dll я бы вообще нашел определение «ОТЛАДКА» — в верхней части файла или где-нибудь еще ?
#if DEBUG
DisableSecureSSLConnections();
#endif
Комментарии:
1. «…Я все еще нахожу код в окружении «#если ОТЛАДКА «там…» — доказательство?
2. Быстрый тест показывает, что на самом деле все работает так, как задумано. В зависимости от
define
этого код будет опущен.3. dotPeek ищет фактический исходный код , если он доступен. Это не показывает вам состояние после компиляции.
4. » Я все еще нахожу код, окруженный «#если ОТЛАДКА» «, — IL не может представить
#if
: дизассемблер не может посмотреть на dll и восстановить#if
. Так что Дотпик получает это откуда-то еще. Скорее всего, он нашел файл .pdb рядом с библиотекой DLL, и в файле .pdb есть путь к исходному коду, поэтому dotPeek любезно нашел ваш фактический исходный код и отображает его вам. Вы должны увидеть другие подсказки, такие как исходный код, который выглядит идентичным вашему фактическому коду, в комплекте с комментариями и значимыми именами локальных переменных5. @canton7 большое спасибо — это была реальная проблема.
Ответ №1:
Как @canton7 упоминалось в разделе комментариев. Фактическая проблема заключалась в том, что файл .pdb был доступен для дизассемблера. Это заставило dotPeek показать фактический источник