Отладка сборок с установленным флагом CorFlags ILLibrary - PullRequest
0 голосов
/ 25 октября 2018

Я пытался отладить некоторые приложения ASP.NET Core.Хотя я установил для переменной среды COMPLUS_ZapDisable значение 1 и установил флажок «Подавлять оптимизацию JIT при загрузке модуля» в Visual Studio, код в нескольких сборках фреймворка было трудно отлаживать, поскольку он был оптимизирован.

Дальнейшие исследованияЯ обнаружил, что эти сборки имеют установленный флаг CorFlags.ILLibrary.Кажется, что в эти сборки встроен предварительно скомпилированный код.Глядя на представление разборки, я вижу, что этот предварительно скомпилированный код действительно выполняется.

Я не нашел никакой документации об этой функции.Он ведет себя подобно сборке NGen-ed, где собственный код не находится в отдельном файле .ni.dll, а встроен в исходную сборку.

Кто-нибудь знает, как создать такую ​​сборку и как отключитьиспользование прекомпилированного кода при отладке?

Спасибо!

1 Ответ

0 голосов
/ 09 апреля 2019

Я наконец нашел ответ на этот вопрос:

.NET Core использует новый метод прекомпиляции под названием Ready2Run .Сборки предварительно компилируются с использованием CrossGen .В полученных сборках установлен флаг CorFlags.ILLibrary.

Использование предварительно скомпилированного кода во время выполнения можно предотвратить, установив для переменной среды COMPlus_ReadyToRun значение 0.

Возможно, лучше также установитьпеременная окружения COMPlus_TieredCompilation равна 0 (см. здесь и здесь ).

...