Как запустить ildasm на. Net core exe / сборке? - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь запустить ildasm (Intermediate Language Disassembler), установленный как часть Visual Studio 2019, для консольного приложения .NetCore3.1.

Использовать командную строку разработчика Visual Studio 2019 и выполнить следующую команду

ildasm.exe D: \ DotNet \ ВведениеToCsharp \ ВведениеToCsharp \ bin \ Debug \ netcoreapp3.1 \ ВведениеToCsharp \ bin \ Debug \ netcoreapp3.1 \ ВведениеToCsharp.exe

Но возникает следующая ошибка:

'D: \ DotNet \ ВведениеToCsharp \ ВведениеToCsharp \ bin \ Debug \ netcoreapp3.1 \ ВведениеToCsharp.exe' не имеет действительного заголовка CLR и не может быть разобрано

this folder content

Примечание: выполнение той же команды в не-Core (. Net Framework 4.x) exe работает нормально. Может быть, есть что-то особенное, что нужно посмотреть на IL в. Net Core?

Ответы [ 3 ]

1 голос
/ 08 марта 2020

Как уже указывалось, .exe in. NET Core - это не более чем хост. Его единственная цель - загрузить CoreCLR, затем JIT скомпилировать и выполнить метод Main вашей сборки. Сам код хранится в .dll. Вы можете проверить это с помощью своего любимого дизассемблера (ILDASM, JetBrains 'dotPeek, ILSpy и др. c).

Почему дизассемблер IL может работать с .exe in. NET Framework? Поскольку исполняемый файл будет управляемой сборкой с соответствующим управляемым заголовком. В отличие от. NET Core,. NET Framework имеет обширную поддержку от загрузчика изображений операционной системы Windows, чтобы настроить все и затем запустить управляемый код в исполняемом файле. См второй обсуждаемый пункт здесь .

0 голосов
/ 05 марта 2020

ПРИМЕЧАНИЕ: EXE в netcore существует только для "windows пользователей", вы должны всегда использовать dll

См. Здесь

Вы можете попробовать эти шаги для netcore сборка (dll):

1 Вы должны иметь coreclr в той же папке, что и ваша dll netcore

2 (запускать команды в командной строке VS)

ildasm.exe /all /out:<path to output>.il <path to dll>.dll
0 голосов
/ 20 января 2020

Вы должны указать ildasm на ваш файл сборки (.dll или .exe), а не на папку вашего проекта, например.

ldasm.exe D:\DotNet\IntroductionToCsharp\IntroductionToCsharp\bin\Debug\netcoreapp3.1\IntroductionToCsharp.exe
...