Konvertieren von .NET App in nativen x86-Code
Gibt es ein Programm vollständig geschrieben in C# und Ziele .NET Framework 2.0.
Gibt es eine Möglichkeit, ich könnte irgendwie kompilieren (übersetzen) verwaltete EXE-Datei in einem nativen so könnte es sein .NET-Agnostiker? Ich weiß, es gibt wahrscheinlich kommerzielle Produkte für diesen Zweck... aber Sie sind ein bisschen teuer.
Das problem ist, dass wir sind, um die Anwendung bereitstellen, die auf Computern mit Windows XP nicht .NET Framework installiert ist. Es gibt auch eine Anforderung, dass das Programm die Größe muss nicht größer als 500 kB (1 MB, maximum) für den Download aus dem web-server (jetzt die Größe ist 255Kb). Das ist, warum es gibt keinen Weg, wir könnten anfügen eine vollwertige .NET-FX (oder auch reduziert), um die heruntergeladene Programm-Datei.
Offensichtlich, es ist eine schreckliche software-engineering-Fehler sollten erkannt und vermieden werden früher und so konnten wir den Einsatz von nativen Technologien wie C++ statt.
Haben wir versucht, für jetzt Novell Mono - open-source-Implementierung von .NET Framework für Linux, MAC und Windows. Mono besteht aus C# - Compiler, IDE, runtime (CLR) und die Klassenbibliothek Baugruppen (wie System.dll und mscorlib.dll - sehr ähnlich .NET class library-Assemblys installiert werden, um GAC).
Was wir versucht zu tun ist, suchen Sie die CLR-Dateien und versenden diese zusammen mit unseren Programm-Datei und ein paar Baugruppen. Auf diese Weise kann das Programm aufgerufen werden, durch ausführen von "mono program.exe" (Eingabeaufforderung) auf dem computer eines Benutzers.
Zusätzlich zu den Unannehmlichkeiten einer solchen Nutzung für den Endbenutzer CLR-Dateien (mono.exe und mono.dll) stellte sich heraus, dass etwa 2,5 Mb insgesamt, das ist viel größer als die gewünschten 500 Kb oder sogar nur 1 Mb.
So, wir haben keine andere Wahl, als die Umsetzung unserer .NETTO-App zur nativen durch einen compiler, aber die Frage bleibt - welchen compiler sollten wir nutzen, und wo könnten wir eines finden...
Nun muss ich stolperte über eine Singularität OS-Projekt von Microsoft Research. Es ist ein open-source-Forschung OS, die in verwaltetem code geschrieben (zumindest teilweise). Die Singularität Betriebssystem enthält eine Bartok-compiler, der das OS nutzt, um zu übersetzen, ein verwaltetes Programm zur nativen (x86-32 bit). Es sollte angemerkt werden, dass Bartok kann nicht übersetzen alle Aspekte der .NET 2.0 zu einer nativen code, aber die meisten von Ihnen. Aber ich habe noch nicht gelernt, wie Sie mithilfe der Singularität...
Ich wäre echt dankbar wenn man mir einige nützliche Tipps und Ratschläge in Bezug auf das problem, Ihre eigenen Erfahrungen mit Singularität OS und Bartok-Compiler oder andere Ansätze das problem, dass ich das übersehen habe und die Möglichkeiten, es zu lösen.
Vielen Dank im Voraus!
Schließlich die Verwendung von Mono-Volle AOT-Funktion (on-Callum Rogers' Beratung) habe ich es geschafft zu produzieren program.exe.dll fehlt eine CLI header.
So sieht es bei mir aus wie eine native dll. Aber ich kann nicht herausfinden, wie zu konvertieren, dass die dll in die exe-Datei, oder machen es betriebsbereit ist.
Auch diese dll scheint nicht auszusetzen, Funktionen von Interesse, wie die main-Funktion.
InformationsquelleAutor der Frage Vlad | 2009-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out AOT (Ahead Of Time) - Kompilierung aus dem Mono-Projekt. Dies stellt die verwaltete Projekt in eine native exe-Datei oder ein elf executable (je nachdem, welches system du als Ziel hast) , muss nicht den JIT. Dies ist die Technik, die verwendet wird, um mono-apps auf dem iPhone (wo der JIT - /Rahmen sind nicht erlaubt) und hat auch den zusätzlichen nutzen der schnellere Startzeiten, geringere Speichernutzung und es macht es schwieriger für die Menschen zu dekompilieren den code. Sie sagte, Sie wurden bereits mit Mono, also sollte es kompatibel sein.
Lesen, darüber am mono-project.com website und bei Miguel de Icaza ' s blog (und iPhone info).
Beachten Sie, dass Sie nicht verwenden können, dynamischer code oder generische Schnittstellen wie
, Und Sie zum kompilieren der DLLs, die von allen Bibliotheken, die Sie verwenden.
PS: Stellen Sie sicher, dass Sie "Voll" AOT für Ihr problem.
InformationsquelleAutor der Antwort Callum Rogers
2017 Update
Als @jenix Kommentar, .NET Native ist nur für Windows Store-Apps(UWP). Nach 3 Jahren der Ankündigung, ist dies immer noch wahr .net native für desktop kann gelöscht werden, von microsoft . Also diese Antwort ist nicht mehr anwendbar ist.
Für Konsolen-apps, die Sie verwenden können .net core Eigenständige Bereitstellungen (SCD). Auch für eine Hallo Welt app, Ihr Paket 50 MB+. Sie noch zu installieren, VC-Laufzeit obwohl.
========
Microsoft Angekündigt .NET Native Preview auf der Build 2014
Der Ankündigung .NET Native Preview
Microsoft .NET Native
InformationsquelleAutor der Antwort prime23
Gibt es ein Projekt namens Zur Lehrerbildung crossnet , analysiert .Net-Assemblies und erzeugt nicht verwalteten C++ - code, der kompiliert werden kann in jedem standard-compiler.
InformationsquelleAutor der Antwort leandrosa81
Nicht wirklich eine Lösung für .NET native Konvertierung, aber vielleicht hilft: http://www.yoda.arachsys.com/csharp/faq/#framework.required
InformationsquelleAutor der Antwort Konamiman
Nicht ganz sicher, dass es gibt viel können Sie tun, außer sich mühsam schreiben Sie die Anwendung. Zu erleichtern, die bereits belastende Prozess, könnte man demontieren .NET-Anwendung mit so etwas wie Reflektor (in Microsoft C++) und verwenden Sie diese als Basis zu beginnen, und ersetzen Sie verwaltete C++ - Referenzen mit einheimischen.
InformationsquelleAutor der Antwort blparker