È possibile compilare il codice .NET IL in codice macchina?
-
02-07-2019 - |
Domanda
Vorrei distribuire i miei programmi .NET senza .NET framework. È possibile compilare un programma .NET in codice macchina?
Soluzione
Sì, è possibile precompilare utilizzando Ngen.exe, tuttavia ciò non rimuove la dipendenza CLR.
Devi comunque spedire anche gli assembly IL, l'unico vantaggio di Ngen è che la tua applicazione può avviarsi senza invocare JIT, in modo da ottenere un tempo di avvio molto rapido.
Secondo CLR Via C #:
Inoltre, gli assembly sono stati precompilati utilizzando Di solito, Ngen è più lento di JIT si assembla perché il compilatore JIT può ottimizzare alla macchina target (32 bit? 64 bit? Registri speciali? ecc.), mentre NGEN produrrà solo a compilazione di base.
EDIT:
C'è qualche dibattito sulle informazioni di cui sopra da CLR Via C #, poiché alcuni dicono che è necessario eseguire Ngen sul computer di destinazione solo come parte del processo di installazione.
Altri suggerimenti
Remotesoft ne ha uno: Salamander .NET Linker
Non ho alcuna esperienza con esso.
Esistono alcuni strumenti di terze parti che lo fanno, ad esempio
Un altro prodotto (costoso e proprietario, a partire da $ 1599) che può fare questo è Xenocode Postbuild . Non l'ho usato da solo però, con un costo per il prodotto nazionale lordo di un piccolo paese africano e tutti ...
È possibile compilare il codice .NET IL al codice macchina?
Sì, ma .NET Framework lo fa per te in fase di esecuzione (impostazione predefinita) o al momento dell'installazione (ngen). Tra le altre ragioni, questo IL - > il codice macchina viene eseguito separatamente su ogni macchina di installazione in modo che possa essere ottimizzato per quella macchina specifica.
Vorrei distribuire il mio .NET programmi senza il framework .NET. È possibile compilare un .NET programma per codice macchina?
No, a tutti gli effetti non puoi farlo. Le soluzioni alternative di terze parti potrebbero funzionare in alcuni scenari, ma a quel punto non lo prenderei davvero in considerazione "codice gestito" o " .NET " più.
Sì, ora puoi! Recentemente Microsoft ha annunciato .NET Native , una tecnologia che compila la tua applicazione con .NET Native runtime (lo chiamano MRT) in un binario (in realtà un eseguibile e una libreria dinamica).
Vedi link: http: //blogs.msdn .com / b / dotnet / archive / 2014/04/02 / annunciando-net-native-preview.aspx http://blogs.msdn.com/b /dotnet/archive/2014/04/24/dotnetnative-performance.aspx
Esiste IL2CPU per la parte della compilation.
Non penso che sia possibile. È possibile creare un assembly pre-assemblato ma è comunque necessario il framework.
Se ti preoccupi solo delle dimensioni della distribuzione del Framework, potresti leggere su this .
Penso che non dovresti: questo è il compito del compilatore JIT.
Tuttavia, è possibile utilizzare ClickOnce o Windows Installer per distribuirlo in modo che il framework mancante non sia un grosso problema: si potrebbe dire al programma di installazione di scaricare il Framework e installarlo.
Guarda il progetto MONO: comando mono con l'opzione --aot. http://www.mono-project.com/AOT
Ho sempre pensato che sarebbe bello compilare c # in codice macchina direttamente senza la dipendenza CLR ....