Режим отладки и режим выпуска - свойство IsJITOptimizerDisabled - PullRequest
3 голосов
/ 23 августа 2010

Я только что посмотрел предыдущие вопросы по теме, но получил странные результаты.

Прежде всего, я следовал и использовал метод, предложенный Скоттом Хансельманом в старой статье в его блоге.: http://www.hanselman.com/blog/HowToProgrammaticallyDetectIfAnAssemblyIsCompiledInDebugOrReleaseMode.aspx

Таким образом, используя IsJITOptimizerDisabled, я должен проверить, скомпилирована ли конкретная DLL в режиме выпуска или в режиме отладки.

Странно то, что я только что попробовалон построил простое приложение, которое проверяет это свойство и уведомляет инспектируемую сборку в режиме отладки или в режиме выпуска.Проверил результаты и все в порядке с двумя dll, которые я уже скомпилировал в обоих режимах.

Затем я передал это простое приложение коллеге, который подтвердил, что на его рабочей станции результаты соответствуют ожидаемым, отладка dll показывает «Отладка».", выпуск показывает" Выпуск "(эти два dll содержатся в одном и том же zip-файле простого приложения).

Но когда он пытается проверить эти dll с этим простым приложением на другом сервере (через mstsc)для обеих dll простое приложение показывает «Debug» (даже если открыть DLL с помощью ILDASM, все выглядит нормально, а некоторые специфические методы, содержащиеся в области «#if DEBUG», отсутствуют в dll Relase).

Теперь, я схожу с ума, есть ли какая-то причина этого вопроса?Я слишком стар, чтобы видеть, что происходит?Может ли отражение как-то зависеть от окружающей среды?Есть какой-нибудь пакет обновления, который решил похожую известную проблему?

Cheers,

Gianluca

Ответы [ 2 ]

1 голос
/ 23 августа 2010

Использование Assembly.LoadFrom () не очень хорошая идея в этом конкретном случае. Используйте fuslogvw.exe, чтобы узнать, почему ваша программа загрузила неправильную сборку. GAC, вероятно.

Anyhoo, здесь вызывается LoadFile ().

1 голос
/ 23 августа 2010

DebuggableAttribute - это атрибут, который не компилируется в код IL, содержащийся в исполняемой сборке. Он вставляется средой выполнения при загрузке сборки. На создание атрибута могут повлиять настройки среды.

Например, включенный в системе профилировщик мог создать переменные среды или параметры реестра, которые влияют на флаги отладки. В теме на форумах MSDN предлагается проверить переменные среды с именем COR_* или параметры реестра в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework (и, возможно, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...