2013-11-22 13 views
7

Voglio compilare un programma C# usando la linea di comando ngen per uno scopo speciale. Così ho creato un'applicazione console in vs2010 e l'ho chiamata ngentest. Quindi un file per nome ngentest.vshost.exe viene creato in vs2010\projects\ngentest\bin\debug. Ho usato questo file come un argomento di comando ngen in Visual Studio 2010 prompt dei comandi, come segue:Come compilare con ngen.exe e come eseguire il codice nativo che viene generato?

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

ma quando faccio questo, non posso ricevere PublicKeyToken e non ho potuto trovare qualsiasi assieme da nessuna parte! se il mio assembly è stato creato, dov'è? e come posso trovarlo? Come posso eseguirlo (con comando o ....!) Per ottenere il risultato?

altrimenti quando costruisco il mio progetto con build ngen dal menu Build di VS, alcuni file sono stati creati nella suddetta directory e uno di questi è ngentest.exe.

+0

Prima di tutto, dovresti farlo su ngentest.exe, non su ngentest.vshost.exe. In secondo luogo, dove è memorizzato non importa, il sistema lo troverà per te. È da qualche parte in una cartella nascosta sotto la directory di Windows. –

+0

ma, come ho capito, ngentest.exe contiene il codice MSIL, ma ngen ha bisogno del codice gestito per generare codice binario (specifico per macchina). e se uso il comando "ngen ngentest.exe", come posso eseguire il mio progetto? – Azad

+0

Ho letto questa pagina, ma non ha potuto aiutarmi ... – Azad

risposta

15

Quando si compila il codice C#, esso viene compilato in un assembly IL. E NGEN accetta l'assembly IL come input e installa l'assembly e le sue dipendenze in Native Image Cache.

Per il tuo esempio binario, è necessario aprire un prompt dei comandi VS amministratore, quindi digitare il seguente

ngen install ngentest.exe

Ciò installare i exe e le sue file di dipendenza nella dll Native Image Cache.

Quindi quando si esegue il exe, il runtime .NET caricherà ed eseguirà l'immagine nativa installata nella cache nativa dell'immagine. Non è necessario eseguire alcun passaggio aggiuntivo per eseguire .NET l'immagine nativa. Il runtime controlla la cache nativa dell'immagine per verificare se è presente un'immagine nativa valida per l'assembly IL.

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

ngen ngentest.exe

Vedi http://blogs.msdn.com/b/junfeng/archive/2007/02/18/native-image-loading.aspx per più informazioni Native caricamento delle immagini.

Si noti che ngentest.vhost.exe è un artefatto creato da VS per fornire una migliore esperienza di debug. È usato da VS. Non dovresti usarlo per NGEN o qualcosa del genere. Vedere la domanda: What is the purpose of the vshost.exe file? per maggiori informazioni.

+0

Se sono su un computer client non avrò un Prompt dei comandi VC. Dov'è ngen in .net 4.5? – Offler

+0

ngen.exe si trova nella directory framework: % windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ ngen.exe per 32 bit e % windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ ngen.exe per 64 bit –

Problemi correlati