Konwertowanie aplikacji .NET na kod natywny x86

Jest program napisany w całości w języku C #, który jest przeznaczony dla .NET Framework 2.0. Czy jest jakiś sposób, w jaki mógłbym jakoś skompilować (przetłumaczyć) zarządzany EXE na rodzimy, aby mógł być agnostyczny .NET? Wiem, że w tym celu są prawdopodobnie produkty komercyjne ... ale są one trochę drogie.

Problem polega na tym, że mamy wdrożyć program na komputerach z systemem Windows XP bez zainstalowanego systemu .NET Framework. Istnieje również wymóg, aby rozmiar programu nie przekraczał 500 KB (maksymalnie 1 MB), ponieważ jest pobierany z serwera WWW (teraz rozmiar to 255 KB). Dlatego nie ma możliwości dołączenia pełnowartościowego .NET FX (lub nawet zredukowanego) do pliku pobranego programu.

Oczywiście jest to okropny błąd inżynierii oprogramowania, który powinien zostać wykryty i uniknięty wcześniej, abyśmy mogli zamiast tego korzystać z rodzimych technologii, takich jak C ++.

Próbowaliśmy na razie Novell's Mono - implementacja .NET Framework dla systemów Linux, MAC i Windows. Mono składa się z kompilatora C #, zestawów IDE, środowiska wykonawczego (CLR) i biblioteki klas (takich jak System.dll i mscorlib.dll - podobnie jak zestawy bibliotek klasy .NET zainstalowane w GAC). Próbowaliśmy zlokalizować pliki CLR i wysłać je wraz z plikiem naszego programu i kilkoma zestawami. W ten sposób program można wywołać uruchamiając „mono program.exe” (wiersz polecenia) na komputerze użytkownika. Oprócz niedogodności związanych z takim użyciem dla użytkowników końcowych pliki CLR (mono.exe i mono.dll) okazały się mieć łącznie około 2,5 Mb, czyli znacznie więcej niż pożądane 500 Kb lub nawet 1 Mb.

Nie pozostawiliśmy żadnej innej opcji, jak tylko przetłumaczyć naszą aplikację .NET na rodzimą przez kompilator, jednak pozostaje pytanie - jakiego kompilatora powinniśmy użyć i gdzie możemy go znaleźć ...

Na razie natknąłem się na projekt Singularity OS firmy Microsoft Research. Jest to system operacyjny oparty na otwartym kodzie źródłowym napisany w kodzie zarządzanym (przynajmniej częściowo). System operacyjny Singularity zawiera kompilator Bartoka, którego system operacyjny używa do przetłumaczenia zarządzanego programu na rodzimy (32-bitowy x86). Należy zauważyć, że Bartok nie może przetłumaczyć wszystkich aspektów .NET 2.0 na kod natywny, ale większość z nich. Jednak nie nauczyłem się jeszcze korzystać z Singularity ...

Byłbym bardzo wdzięczny, gdybyś dostarczył mi kilku przydatnych wskazówek i porad dotyczących problemu, własnych doświadczeń z Singularity OS i Bartok Compiler lub innego podejścia do problemu, który przeoczyłem i sposobów jego rozwiązania.

Z góry bardzo dziękuję!

Wreszcie, korzystając z funkcji Mono's Full AOT (w poradach Calluma Rogersa), udało mi się stworzyć program.exe.dll, który nie ma nagłówka CLI. Wygląda mi to na rodzimą bibliotekę DLL. Jednak nie mogę dowiedzieć się, jak przekonwertować dll do exe lub sprawić, by działał. Również ten dll nie wydaje się ujawniać żadnych interesujących funkcji, takich jak główna funkcja.

questionAnswers(5)

yourAnswerToTheQuestion