Konvertieren von .NET App in nativen x86-Code

Es gibt ein Programm, das vollständig in C # geschrieben ist und auf .NET Framework 2.0 abzielt. Gibt es eine Möglichkeit, verwaltete EXE-Dateien in native zu kompilieren (zu übersetzen), damit sie .NET-unabhängig sind? Ich weiß, dass es wahrscheinlich kommerzielle Produkte für diesen Zweck gibt ... aber sie sind ein bisschen teuer.

Das Problem ist, dass wir das Programm auf Computern unter Windows XP ohne .NET Framework bereitstellen müssen. Es gibt auch eine Anforderung, dass die Programmgröße 500 KB (maximal 1 MB) nicht überschreiten darf, damit es vom Webserver heruntergeladen werden kann (jetzt beträgt die Größe 255 KB). Aus diesem Grund können wir der heruntergeladenen Programmdatei auf keinen Fall einen vollwertigen .NET FX (oder sogar einen reduzierten) anhängen.

Offensichtlich handelt es sich um einen schrecklichen Softwareentwicklungsfehler, der früher hätte erkannt und vermieden werden müssen, damit wir stattdessen native Technologien wie C ++ verwenden können.

Wir haben vorerst Novells Mono ausprobiert - eine Open-Source-Implementierung von .NET Framework für Linux, MAC und Windows. Mono besteht aus C # -Compiler-, IDE-, Laufzeit- (CLR-) und Klassenbibliotheksassemblys (wie System.dll und mscorlib.dll - genau wie die in GAC installierten .NET-Klassenbibliotheksassemblys). Wir haben versucht, CLR-Dateien zu finden und diese zusammen mit der Programmdatei und einigen Assemblys zu versenden. Auf diese Weise kann das Programm durch Ausführen von "mono program.exe" (Eingabeaufforderung) auf dem Computer eines Benutzers aufgerufen werden. Zusätzlich zu der Unannehmlichkeit einer solchen Verwendung für den Endbenutzer stellte sich heraus, dass CLR-Dateien (mono.exe und mono.dll) insgesamt etwa 2,5 MB groß sind, was viel größer als die gewünschten 500 KB oder sogar 1 MB ist.

Wir haben also keine andere Wahl, als unsere .NET-App von einem Compiler in eine native zu übersetzen. Es bleibt jedoch die Frage, welchen Compiler wir verwenden sollten und wo wir einen finden könnten.

Im Moment bin ich auf ein Singularity OS-Projekt von Microsoft Research gestoßen. Es ist ein Open-Source-Forschungsbetriebssystem, das (zumindest teilweise) in verwaltetem Code geschrieben ist. Das Singularity-Betriebssystem enthält einen Bartok-Compiler, mit dem das Betriebssystem ein verwaltetes Programm in ein natives (x86 32-Bit) übersetzt. Es sollte beachtet werden, dass Bartok nicht alle Aspekte von .NET 2.0 in einen nativen Code übersetzen kann, die meisten jedoch. Allerdings habe ich noch nicht gelernt, wie man die Singularität benutzt ...

Ich wäre Ihnen sehr dankbar, wenn Sie mir einige nützliche Tipps und Ratschläge bezüglich des Problems, Ihrer eigenen Erfahrung mit Singularity OS und Bartok Compiler oder anderer Ansätze für das von mir übersehene Problem und Lösungsmöglichkeiten geben könnten.

Vielen Dank im Voraus!

Schließlich habe ich es mithilfe der vollständigen AOT-Funktion von Mono (auf Empfehlung von Callum Rogers) geschafft, eine program.exe.dll zu erstellen, der ein CLI-Header fehlt. So sieht es für mich aus wie eine native DLL. Jedoch kann ich nicht herausfinden, wie man diese DLL in exe umwandelt oder es betriebsbereit macht. Auch diese DLL scheint keine interessanten Funktionen wie die Hauptfunktion aufzudecken.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage