Там программа, полностью написанная на С#, которая предназначена для .NET Framework 2.0. Есть ли способ, который я мог бы каким-то образом скомпилировать (перевести) управляемый EXE на собственный, чтобы он мог быть .NET-агностиком? Я знаю, что для этой цели, вероятно, есть коммерческие продукты... но они немного дороже.
Проблема заключается в том, что мы должны развернуть программу на компьютерах под управлением Windows XP без установленной .NET Framework. Также необходимо, чтобы размер программы не превышал 500 КБ (максимум 1 Мб), поскольку он загружается с веб-сервера (теперь размер составляет 255 Кбит). Вот почему мы не могли подключить полноценный .NET FX (или даже сокращенный) к загруженному программному файлу.
Очевидно, что это ужасная ошибка в разработке программного обеспечения, которую следовало обнаружить и избежать раньше, поэтому мы могли бы использовать собственные технологии, такие как С++.
Мы сейчас пытаемся использовать Novell Mono - версию .NET Framework для Linux, MAC и Windows с открытым исходным кодом. Моно состоит из компиляторов С#, 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 включает компилятор Bartok, который использует ОС для перевода управляемой программы на нативную (x86 32 бит). Следует отметить, что Bartok не может перевести все аспекты .NET 2.0 на собственный код, но большинство из них. Однако я еще не научился использовать сингулярность...
Я был бы вам очень благодарен, если бы вы предоставили мне несколько полезных советов и советов относительно проблемы, свой собственный опыт работы с ОС Singularity и компилятором Bartok или другие подходы к проблеме, которую я упустил, и способы ее решения.
Спасибо вам заблаговременно!
Наконец, используя функцию Mono Full AOT (по совету Callum Rogers), мне удалось создать файл program.exe.dll, в котором отсутствует заголовок CLI. Так что это выглядит как родная DLL. Однако я не могу понять, как преобразовать эту dll в exe или сделать ее работоспособной. Кроме того, эта dll не представляет каких-либо функций, таких как основная функция.