Где реализован COMDynamicWrite.SavePEFile?

Я отлаживаю проблему, сохраняя динамическую сборку на диск, и хочу посмотреть, какие исключения могут быть сгенерированы при сохранении PE-файла сборки на диск. Код сохранения в конечном итоге вызывает AssemblyBuilder.Save который в конечном итоге вызывает внутренний метод ModuleBuilder.SavePEFile, Этот метод является внутренним QCall, и целевой метод объявлен в классе с именем COMDynamicWrite, Тем не менее, кажется, что весь репозиторий не имеет реализации для этого метода.

Где и как COMDynamicWrite::SavePEFile реализованы?

1 ответ

Решение

Давайте ответим на этот вопрос, есть важная деталь, о которой должен знать любой, кто смотрит на проект CoreCLR. Я на 90% уверен, что.NETCore и полная версия CLR были созданы из одной и той же кодовой базы. Вещи, которые не должны быть основной версией, были отключены #ifndef FEATURE_CORECLR, Например, вы найдете поддержку AppDomain - функцию, которой нет в.NETCore, и которую там никогда не планируется.

10 февраля 2017 года они сделали большой шаг, который навсегда отделил базу кода CoreCLR от ее корней. Они агрессивно удалили код, который всегда отключен, когда FEATURE_CORECLR не действует. Вероятно, чтобы сделать процесс переноса более управляемым, я думаю, что они получили много патчей к этому коду.

Это также удалило COMDynamicWrite::SavePEFile(). Типичная проблема с портированием, поскольку Unix не использует формат исполняемых файлов PE32. Это все еще там в предыдущей версии.

В общем, я рекомендую использовать первую зарегистрированную версию CoreCLR для такого рода исследований. Он имеет наименьшее количество исправлений и поэтому, скорее всего, точно представляет поведение CLR на рабочем столе. Кроме того, будьте осторожны с изменениями в CLR после раскола. Конечно, очень трудно увидеть. Хотя он в основном находится в режиме обслуживания, я знаю, например, что они работали с GC, чтобы он мог лучше справляться с гигантскими размерами кучи в несколько гигабайт. Только потому, что это вызвало неприятную ошибку в 4.6, исправленную в 4.6.1

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