Domanda

Se voglio eseguire un'applicazione .NET in una macchina in cui il framework .NET non è disponibile;Esiste un modo per compilare l'applicazione in codice nativo?

È stato utile?

Soluzione

Microsoft ha un articolo che descrive come farlo Compila MSIL in codice nativo

Puoi usare Ngen.

Il generatore di immagini nativo (NGEN.EXE) è uno strumento che migliora le prestazioni delle applicazioni gestite.Ngen.exe crea immagini native, che sono file contenenti codice macchina specifico per il processore compilato e le installano nella cache delle immagini native sul computer locale.Il runtime può utilizzare le immagini native della cache invece utilizzando il compilatore Just-Time (JIT) per compilare l'assemblaggio originale.

Sfortunatamente, hai ancora bisogno delle librerie del framework per eseguire il tuo programma.Che io conosca, non esiste alcuna funzionalità dell'SDK di MS .Net Framework che consenta di compilare tutti i file richiesti in un unico eseguibile

Altri suggerimenti

RemoteSoft crea uno strumento che compila un'applicazione .NET in un pacchetto che può essere eseguito senza .NET installato.Non ho alcuna esperienza in merito:

Salamandra RemoteSoft

Ne ho testati diversi e al momento l'unico che supporta .NET 3.5 e ha anche un ottimo stack di virtualizzazione è Xenocodice Postcostruzione

Con ngen è comunque necessario avere installato .NET framework, ma utilizzando uno strumento in quanto tale tutto il codice gestito viene compilato in codice nativo in modo da poterlo distribuire su macchine senza la presenza del framework.

Microsoft ha annunciato il suo Anteprima nativa .NET che consentirà di eseguire applicazioni .NET senza avere il framework installato.

Guarda: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

FAQ: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

Puoi scaricare Microsoft .NET Native per VS2013 da qui: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Come alcune delle altre risposte qui hanno menzionato, puoi usare il file .NET nativo strumento per compilare la tua app in codice macchina nativo.A differenza di quelle risposte, tuttavia, spiegherò Come per farlo.

Passaggi:

  1. Installa il interfaccia della riga di comando dotnet (interfaccia della riga di comando), che fa parte della nuova toolchain .NET Core.Lo useremo per compilare la nostra app;puoi trovare un bell'articolo a riguardo Qui.

  2. Apri un prompt della shell e cd nella directory della tua app.

  3. Digita questo:

    dotnet compile --native
    

Questo è tutto!Al termine, la tua app verrà compilata in un singolo binario, in questo modo:

Native compiled .NET Core EXE

Sarà un eseguibile autonomo;nessun PDB, assembly o file di configurazione inclusi (evviva!).


In alternativa, se desideri un programma ancora più veloce, puoi eseguire questo:

dotnet compile --native --cpp

Ciò ottimizzerà il tuo programma utilizzando il generatore di codice C++ (al contrario di RyuJIT), quindi la tua app sarà ancora più ottimizzata per gli scenari AOT.

È possibile trovare ulteriori informazioni al riguardo nella CLI dotnet Deposito GitHub.

Sì, usando Ngen, il generatore di immagini native.Ci sono però una serie di cose di cui devi essere consapevole:

  • Hai ancora bisogno del CLR per eseguire il tuo eseguibile.
  • Il CLR non ottimizzerà dinamicamente i tuoi assiemi in base all'ambiente in cui viene eseguito (ad es.486 contro586 contro686, ecc.)

Tutto sommato vale la pena utilizzare Ngen solo se è necessario ridurre il tempo di avvio della propria applicazione.

Puoi!Tuttavia sei limitato a .NET 1.1 (nessun generico per te):Compilazione anticipata mono (AOT)

Tuttavia, ciò significa che la compilazione è realmente nativa, quindi non sarai più in grado di distribuire un singolo assembly di bytecode, ne avrai bisogno di uno per piattaforma.

È stato originariamente progettato perché non esiste .NET o Mono per iPhone, quindi è così che hanno creato MonoTouch.

Puoi farlo utilizzando la nuova tecnologia di precompilazione denominata .NET Native.Controllalo qui: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Attualmente è disponibile solo per le app di Windows Store.Esegue il collegamento di singoli componenti.Pertanto le librerie .NET Framework sono collegate staticamente alla tua app.Tutto viene compilato in modo nativo e gli assembly IL non vengono più distribuiti.Le app non vengono eseguite con CLR ma con un runtime ridotto e ottimizzato chiamato Managed Runtime (Mrt.dll)

Come affermato in precedenza, NGEN ha utilizzato un modello di compilazione mista e si è affidato a IL e JIT per gli scenari dinamici..NET Native non utilizza JIT ma supporta vari scenari dinamici.Gli autori del codice dovrebbero utilizzare Direttive di runtime per fornire suggerimenti al compilatore .NET Native sugli scenari dinamici che desiderano supportare.

È possibile utilizzare ngen.exe per generare un'immagine nativa Ma devi comunque distribuire anche il codice non nativo originale e necessita ancora del framework installato sul computer di destinazione.

Il che non risolve il tuo problema, davvero.

La natura di .NET è quella di poter installare app che sono state compilate in MSIL, quindi tramite JIT o Ngen, MSIL viene compilato in codice nativo e archiviato localmente in una cache.Non è mai stato previsto di generare un vero file .exe nativo che possa essere eseguito indipendentemente dal framework .NET.

Forse c'è qualche hack che fa questo, ma non mi sembra sicuro.Ci sono troppe dinamiche che richiedono il framework, come ad esempio:caricamento dinamico di assembly, generazione di codice MSIL, ecc.

Risposta del 2019:Utilizzo dotnet/corert.Può compilare progetti .NET Core in modo autonomo .exe File.Nessuna dipendenza (ad eccezione delle librerie di sistema come kernel32.dll).Scommetto che questo è esattamente ciò di cui ha bisogno l'OP.

Dalla sua home page GitHub:

Il compilatore CoreRT può compilare un'applicazione .NET Core gestita in un file eseguibile nativo (specifico dell'architettura) facile da distribuire.Può anche produrre librerie dinamiche o statiche autonome che possono essere utilizzate da applicazioni scritte in altri linguaggi di programmazione.

Penso che non sia possibile.Sarà necessario distribuire anche il firmware .NET.Se vuoi compilare l'app .NET in codice nativo, usa NGen attrezzo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top