Преобразование приложения .NET в собственный код x86

Есть программа, полностью написанная на C #, предназначенная для .NET Framework 2.0. Есть ли способ, которым я мог бы каким-то образом скомпилировать (перевести) управляемый EXE-файл в нативный, чтобы он мог быть .NET-независимым? Я знаю, что, вероятно, есть коммерческие продукты для этой цели ... но они немного дороже.

Проблема в том, что мы должны развернуть программу на компьютерах под управлением Windows XP без установленного .NET Framework. Также существует требование, чтобы размер программы не превышал 500 КБ (максимум 1 МБ), поскольку она загружается с веб-сервера (сейчас размер составляет 255 КБ). Вот почему мы никак не можем присоединить полноценный .NET FX (или даже уменьшенный) к файлу загруженной программы.

Очевидно, что это ужасная ошибка разработки программного обеспечения, которую следовало бы обнаружить и избежать раньше, чтобы вместо этого мы могли использовать нативные технологии, такие как C ++.

На данный момент мы попробовали Novell Mono - реализацию .NET Framework с открытым исходным кодом для Linux, MAC и Windows. Mono состоит из компилятора C #, IDE, среды выполнения (CLR) и библиотек классов (например, System.dll и mscorlib.dll - во многом как сборки библиотек классов .NET, установленные в GAC). Мы попытались найти файлы CLR и отправить их вместе с файлом нашей программы и несколькими сборками. Таким образом, программу можно запустить, запустив «mono program.exe» (командная строка) на компьютере пользователя. В дополнение к неудобству такого использования файлов CLR для конечного пользователя (mono.exe и mono.dll) в общей сложности оказалось около 2,5 МБ, что намного больше, чем требуемые 500 КБ или даже 1 МБ.

Итак, у нас не осталось другого выбора, кроме как перевести наше .NET-приложение в нативное с помощью компилятора, однако остается вопрос - какой компилятор нам следует использовать и где мы могли бы его найти ...

На данный момент я наткнулся на проект ОС Singularity от Microsoft Research. Это исследовательская ОС с открытым исходным кодом, написанная в управляемом коде (по крайней мере, частично). ОС Singularity OS включает в себя компилятор Bartok, который ОС использует для перевода управляемой программы в собственную (32-разрядную версию x86). Следует отметить, что Bartok не может перевести все аспекты .NET 2.0 на собственный код, но большинство из них. Однако я еще не научился использовать Сингулярность ...

Я был бы очень признателен вам, если бы вы могли дать мне несколько полезных советов и советов относительно этой проблемы, вашего собственного опыта работы с ОС Singularity и Bartok Compiler или других подходов к проблеме, которую я пропустил, и путей ее решения.

Заранее большое спасибо!

Наконец, используя функцию Mono Full AOT (по совету Каллума Роджерса), мне удалось создать файл program.exe с отсутствующим заголовком CLI. Так это выглядит для меня как родной dll. Однако я не могу понять, как преобразовать эту dll в exe или сделать ее работоспособной. Также эта dll, кажется, не представляет каких-либо интересных функций, таких как основная функция.

Ответы на вопрос(5)

Ваш ответ на вопрос