Однофайловый exe-файл действительно является неуправляемой оболочкой, и ILSpy не поддерживает его декомпиляцию. Но когда вы запускаете исполняемый файл, он разворачивает его содержимое во временную папку. Таким образом, вы можете найти управляемый dll и декомпилировать его с помощью ILSpy.
Чтобы найти временную папку, вы можете использовать любой инструмент, который показывает расположение сборок, загруженных процессом. SysInternals Process Monitor ( procmon ) является хорошим.
Вы можете настроить procmon для фильтрации по имени вашего exe-файла, и при запуске exe-файла procmon должен показать некоторые события для сборок, загружаемых из временной папки:
Вы можете перейти к этой папке и найти там свою управляемую dll. И вы можете декомпилировать, используя ILSpy из этого места.
Я написал запись в блоге: https://eersonmez.blogspot.com/2020/02/ilspy-decompiling-net-core-self.html