То, что Сколима сказал, было правильно, довольно странно, что он получил отрицательное голосование.
Вы не должны использовать выходные данные, сгенерированные компилятором AOT Mono.
Компиляция AOT Mono - это процесс, который кэширует выходные данные компиляции JIT и оставляет их в общей библиотеке, которая загружается средой выполнения Mono по требованию. Создаемый файл .so содержит предварительно скомпилированный код и метаданные, необходимые для использования во время выполнения.
Чтобы использовать файл AOT, вы просто вызываете вашу программу следующим образом:
mono program.exe
Mono загрузит метаданные из program.exe и проверит наличие файла program.exe.so, чтобы избежать своевременной компиляции во время выполнения, и вместо этого использует код из файла .so. Тот же процесс применяется ко всем ссылкам на библиотеки.
Даже в режиме полной статической компиляции Mono создается код, который требует наличия исходного файла .exe.
Если вы хотели получить собственный исполняемый файл, вы можете попробовать команду mkbundle, которая упаковывает среду выполнения Mono и вашу программу в один исполняемый файл.