Как узнать, была ли сборка.NET скомпилирована с флагом TRACE или DEBUG

Есть ли способ узнать, была ли сборка скомпилирована с установленным флагом TRACE или DEBUG без изменения сборки?

6 ответов

Единственный лучший способ сделать это - проверить сами скомпилированные сборки. Rotem Bloom нашел здесь очень полезный инструмент под названием "Информация о сборке.NET". После того, как вы установите это, он ассоциирует файлы.dll с самим собой. После установки вы можете просто дважды щелкнуть по сборке, чтобы открыть ее, и она предоставит вам детали сборки, как показано на скриншоте ниже. Там вы можете определить, скомпилирован он или нет.

http://ruchitsurati.net/myfiles/asm_info.jpg

http://ruchitsurati.net/myfiles/release_assembly.PNG

LinkText: http://www.codeplex.com/AssemblyInformation

static bool IsDebug(){
 bool rv = false;
 #if DEBUG
 rv = true;
 #endif
 return rv;
}

Прямая ссылка на инструмент IsDebug вместе с инструкциями по использованию.

Приложение "IsDebug", упомянутое выше, на самом деле содержит ошибку, которая не отражает правильные атрибуты DubuggableAttributes. Это неправильно предполагает, что если присутствует атрибут DebuggableAttribute, то сборка не оптимизирована JIT. Я предоставил правильную реализацию в своем блоге по адресу:

Как определить, является ли сборка отладочной или выпускной

Вероятно, нет никакого общего способа. Тем не менее, вы можете искать ссылки на Assert а также Debug от System.Diagnostics Пространство имен. Их наличие будет указывать на то, что установлен флаг DEBUG.

То же самое относится и к Trace и флаг TRACE.

Очевидно, что это не сработает, если исходный код не использует типы из этих пространств имен.

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