2013-11-22 26 views
7

我想編譯一個使用ngen命令行的c#程序用於特殊目的。因此,我在vs2010中創建了一個控制檯應用程序,並將其命名爲ngentest。所以在vs2010\projects\ngentest\bin\debug中創建了一個名爲ngentest.vshost.exe的文件。 我在Visual Studio中使用該文件作爲NGEN命令的參數2010命令提示符,如下所示:如何編譯ngen.exe以及如何運行生成的本機代碼?

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

,但是當我這樣做,我不能接受PublicKeyToken,我找不到任何地方的任何組件! 如果我的程序集已創建,它在哪裏?以及我如何找到它?我如何運行它(用命令,或....!)來獲得我的輸出?

否則,當我從VS的Build菜單構建ngen的項目來構建項目時,會在上述目錄中創建一些文件,其中一個文件是ngentest.exe

+0

首先,您應該對ngentest.exe執行此操作,而不是對ngentest.vshost.exe執行此操作。其次,它的存儲位置並不重要,系統會爲您找到它。它位於Windows目錄下的隱藏文件夾中。 –

+0

但據我瞭解ngentest.exe包含MSIL代碼,但ngen需要託管代碼來生成二進制代碼(機器特定)。如果我使用命令「ngen ngentest.exe」,我如何運行我的項目? – Azad

+0

我看了這個頁面,但它無法幫到我... – Azad

回答

15

當你編譯你的C#代碼時,它被編譯成一個IL程序集。 NGEN將IL程序集作爲輸入,並將程序集及其依賴項安裝到本機映像緩存中。

對於示例程序,您需要打開一個管理員VS命令提示符,然後鍵入以下

NGEN安裝ngentest.exe

這將安裝您exe及其依賴dll文件到本機映像緩存。

然後,當你運行你的exe,.NET運行庫將加載並運行安裝到本機映像緩存本地圖像。您無需採取任何額外的步驟就可以讓.NET運行本地映像。運行時檢查本機映像緩存以查看IL程序集是否有有效的本機映像。

您可以驗證本機映像被鍵入以下命令安裝:

NGEN顯示ngentest.exe

對本機映像加載更多信息,請參見http://blogs.msdn.com/b/junfeng/archive/2007/02/18/native-image-loading.aspx

請注意,ngentest.vhost.exe是由VS創建的工件,以提供更好的調試體驗。它由VS使用。您不應該將此用於NGEN或任何其他用途。查看問題:What is the purpose of the vshost.exe file?瞭解更多信息。

+0

的.net加載程序集。如果我在客戶端機器上,我將不會有VC命令提示符。 .net 4.5中的ngen在哪裏? – Offler

+0

ngen.exe位於以下框架目錄中: %windir%\ Microsoft.NET \ Framework \ v4.0.30319 \ ngen.exe for 32bit and %windir%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ ngen.exe爲64位 –

相關問題