Come Compilare con ngen.exe e Come eseguire codice nativo che viene generato?

Voglio compilare un programma in C# utilizzando ngen riga di comando per uno scopo speciale. Così ho creato un’applicazione console in VS2010 il nome di ngentest. Un file dal nome ngentest.vshost.exe è creato in vs2010\projects\ngentest\bin\debug.
Ho usato questo file come un ngen argomento del comando in VS2010 prompt dei comandi come segue:

ngen "c:\documents\vs2010\projects\ngentest\bin\debug\ngentest.vshost.exe"

Ma quando lo faccio, non posso ricevere PublicKeyToken e non riuscivo a trovare alcuna assemblea ovunque!
Se il mio assemblea è creato, dove si trova? E come posso trovarlo? Come posso eseguire(con il comando, o…!) per ottenere la mia uscita?

Altrimenti quando costruisco il mio progetto di costruire ngen dal menu genera da VS, alcuni file sono stati creati nel citato directory, e uno di loro è ngentest.exe.

  • Prima di tutto, si dovrebbe fare questo in ngentest.exe e non su ngentest.vshost.exe. In secondo luogo, in cui è memorizzato, non importa, il sistema troverà per voi. E ‘ da qualche parte in una cartella nascosta sotto la directory di Windows.
  • ma, come ho capito il ngentest.exe contiene il codice MSIL, ma ngen esigenze gestito il codice per generare il codice binario(specifiche di macchina). e se uso il comando “ngen ngentest.exe” come posso eseguire il mio progetto?
  • Ho letto questa pagina, ma non poteva aiutarmi…
  • Il primo paragrafo della pagina è “Il Generatore di Immagini Native (Ngen.exe) è uno strumento che migliora le prestazioni delle applicazioni gestite. Ngen.exe crea immagini native, che sono file che contengono compilato in codice macchina specifico del processore, e li installa in native image cache sul computer locale. Il runtime è possibile utilizzare le immagini native dalla cache invece di utilizzare il just-in-time (JIT) compilatore per compilare l’assembly originale.” Quale parte non ti è chiara?
  • Come runtime esegue questa applicazione nativa immagini? e cosa devo fare?
  • Leggere la “Fusione del Motore”, e sai dove .Netta di carico assemblee

InformationsquelleAutor Azad | 2013-11-22

 

One Reply
  1. 19

    Quando si compila il codice C#, viene compilato in un IL montaggio. E NGEN prende IL montaggio come input e consente di installare l’assembly e le sue dipendenze in Cache Immagini Native.

    Per il tuo esempio binarie, è necessario aprire un admin VS prompt dei comandi, digitare il seguente

    ngen install ngentest.exe

    Questo sarebbe installare il exe e la sua dipendenza dll file nella Cache delle Immagini Native. Si utilizza il nome del file per l’assemblea.

    Poi quando si esegue il vostro exe, l’ .NET runtime caricare ed eseguire l’immagine nativa installata Cache delle Immagini Native. Non c’è bisogno di prendere qualsiasi passo in più per avere .NETTO Immagine Nativa. I controlli in fase di esecuzione l’Immagine Nativa Cache per vedere se c’è una valida Immagine Nativa per il montaggio.

    È possibile verificare che un immagine nativa è installato digitando il seguente comando:

    ngen display ngentest

    In questo caso è necessario utilizzare il nome dell’assembly. Nota che a 32 bit ngen solo installare e visualizzare 32 bit, assemblee e 64 bit ngen solo 64 bitassemblies.

    Vedere http://blogs.msdn.com/b/junfeng/archive/2007/02/18/native-image-loading.aspx per maggiori informazioni su Native per il caricamento delle Immagini.

    Nota che ngentest.vhost.exe è un artefatto creato da VS per fornire la migliore esperienza di debug. Esso è utilizzato da VS. Non si dovrebbe usare che per NGEN o qualsiasi cosa per quella materia. Vedere la domanda: Qual è lo scopo della vshost.exe il file? per ulteriori info.

    • Se io sono su una macchina client, io non sono un VC Comando Promt. Dove è ngen in .net 4.5?
    • ngen.exe si trova nel quadro directory: %windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe per 32bit e %windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe per 64bit
    • Per rendere la risposta migliore, credo che questo pezzo di informazioni sarebbe bello: When there is a change to your assembly, after you install the update, you just need to simply call "ngen.exe update", and CLR will automatically regenerate all the native images affected by the change to your assembly. Strano che questo non accetta il percorso di un file, anche se… :^)
    • in esecuzione update è raccomandato da Microsoft, ma è molto lento. Andrò su tutte le assemblee dell’intero sistema, che può richiedere alcuni minuti. In alternativa, prendere in considerazione l’esecuzione di install di nuovo. In questo modo si aggiorna solo le dipendenze.

Lascia un commento