.Net FrameWork下面如何生成AOT呢?
前言
有人問.Net FrameWorker可以AOT嗎?其實(shí)AOT預(yù)編譯,在.Net FrameWorker1.0里面就有了。它叫做Ngen,只不過當(dāng)時(shí)稱呼生成本機(jī)映像,實(shí)際上還是一個(gè)東西,也就是預(yù)編譯。很多小伙伴還在用.Net FrameWorker版本,本篇也來看下。
概括
1.介紹
微軟很早之前就提供了一個(gè)小工具,叫做:Ngen.exe。它跟你安裝Visual Studio的時(shí)候一起安裝進(jìn)來了。它的路徑一般的在:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe //注意這里是64位的
它就是讓不跨平臺(tái)的.Net Frameworker生成本地機(jī)器碼,然后執(zhí)行。
2.用法
應(yīng)該怎么用它呢?
一:代碼假如說你有以下.Net Frameworker代碼,項(xiàng)目名稱NgenDemo
static void Main(string[] args)
{
Console.WriteLine("hello Ngen Call The Main Method");
Console.ReadLine();
}
二.注意事項(xiàng):
注意一:把VS里的AnyCpu切換成X64注意二:打開VS命令行工具,選擇64位的注意三:要以管理員的身份運(yùn)行64位VS命令行工具三:生成比如把以上NgenDemo這個(gè)項(xiàng)目放到桌面上。在Visual Studio里面摁F5運(yùn)行下,在目錄:
C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug
下面會(huì)生成:NgenDemo.exe。
打開VS命令行工具:
x64 Native Tools Command Prompt for VS 2022 //注意這里是64位的
運(yùn)行如下命令:ngen.exe install后面跟著NgenDemo.exe路徑
C:\Windows\System32>ngen.exe install "C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe"
Microsoft (R) CLR Native Image Generator - Version 4.8.9065.0
Copyright (c) Microsoft Corporation. All rights reserved.
1> Compiling assembly C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe (CLR v4.0.30319) ...
查看下生成的映像是否正確:
C:\Windows\System32>ngen.exe display "C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe"
Microsoft (R) CLR Native Image Generator - Version 4.8.9065.0
Copyright (c) Microsoft Corporation. All rights reserved.
NGEN Roots:
C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe
NGEN Roots that depend on "C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe":
C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe
Native Images:
NgenDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null <debug>
可以看到映像已經(jīng)生成了。
到目錄:
C:\Windows\assembly\NativeImages_v4.0.30319_64 //注意它這個(gè)最后面的64是64位
里面看到一堆文件,它就是生成本機(jī)映像,以及本機(jī)緩存。此后在本機(jī)運(yùn)行的時(shí)候,可以直接雙擊NgenDemo.exe就可以運(yùn)行了。
如果想要卸載本機(jī)映像,運(yùn)行如下命令:
C:\Windows\System32>ngen.exe uninstall "C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe"
Microsoft (R) CLR Native Image Generator - Version 4.8.9065.0
Copyright (c) Microsoft Corporation. All rights reserved.
Uninstalling assembly C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug\NgenDemo.exe
就可以卸載了。
以上就是.Net Framework生成的本機(jī)映像。它有一些缺陷,每個(gè)機(jī)器上都要生成一次,其次它的程序集緩存不能合并到一起,需要C:\Windows\assembly路徑下的文件支持,才能夠運(yùn)行。
所以后面微軟開啟了corert項(xiàng)目以及現(xiàn)在的nativeAOT項(xiàng)目,都是意圖取代它。