Muss C # das .NET-Framework ausführen, wenn wir NGen.exe verwenden, um es in systemeigenen Code zu kompilieren?

8

Ich weiß, C ++ - Code läuft direkt auf dem lokalen Rechner. Ich weiß auch, dass wir c # -Code in nativen Code mit NGen.exe kompilieren können. Meine Frage ist

Wenn wir den nativen Codegenerator NGen.exe verwenden, um c # -Code in nativen Code zu kompilieren, brauchen wir noch das .NET-Framework, um es auszuführen?

    
user1762254 20.10.2012, 22:19
quelle

3 Antworten

6

In der Tat, wenn Sie Ihren C ++ Code in eine Windows-Programmdatei kompilieren, brauchen Sie immer noch Win32-DLLs und andere Sachen. Ihr Programm kann nicht auf einer CPU laufen, die außer Ihrem Programm nichts hat.

Die gleiche Geschichte für C #. Wenn Sie C # in nativen Code kompilieren, benötigen Sie den JIT-Compiler nicht, der Teil der .NET-Laufzeitumgebung ist. Aber Sie brauchen immer noch alle anderen Teile von .NET Runtime.

Zum Beispiel ist das .NET Framework mit all seinen Klassen nicht in Ihr Programm eingebunden. Wenn sie alle erforderlichen .NET-Klassen in Ihre Binärdatei aufnehmen würden, würde eine einfache Hello world -App groß werden.

    
Kirill Kobelev 20.10.2012 22:22
quelle
1

Sie können mono verwenden, um eine C # -App zu erstellen, die alles mit statisch verknüpften Framework-Bibliotheken vorkompiliert hat und keine separate Laufzeit benötigt.

Ich würde es jedoch nicht empfehlen. Nicht alles ist für das statische Verknüpfen verfügbar, und eines der Dinge bei der Verwendung eines JITter ist, dass es Ihren Code im Durchschnitt über alle Bereitstellungen hinweg schneller macht, da Sie nun maschinenspezifische Optimierungen besser nutzen können . Es ist auch nicht etwas, das selbst mono eingerichtet ist, um aus der Box zu tun.

    
Joel Coehoorn 20.10.2012 23:32
quelle
0

Ja, Sie benötigen das Framework , da die von Ihrer App verwendeten Bibliotheken aus dem Framework stammen.

Wenn Sie NGen verwenden, wird nicht nur Ihr Code mit nativem Code kompiliert, sondern auch Teile des Framework-Codes werden "nativisiert", genau die Teile, die Ihre Apps verwenden.

All dies ändert nichts an Ihren Assembly (exe oder dll) physical Bytes, dies kompiliert die IL zu nativ und speichert diese nativen Bytes im kompilierten Assemblycache.

Verweise im kompilierten Assembly-Cache benötigen noch einige Framework-Komponenten, insbesondere für Framework-Kern, der nativen Code vom Anfang ist.

    
JuanK 21.10.2012 14:13
quelle

Tags und Links