.Net Framework下面如何生成AOT呢?

前言

有人問,老版本的.net frameworker能不能生成AOT?其實AOT預編譯,在.Net FrameWorker1.0裏面就有了。它叫做Ngen,只不過當時叫做生成本機映像,實際上還是一個東西,也就是預編譯。本篇來看下。原文:.Net Framework生成AOT

概括

1.介紹

現在的現代化的.Net已經到了.Net8了,它的AOT程序已經趨近於完美。可以單個Exe運行在MacOS/Linux/Win等平臺上。但是在.Net FrameWorker上面如果想用AOT應該怎麼搞呢?

微軟很早之前就提供了一個小工具,叫做:Ngen.exe。它跟你安裝Visual Studio的時候一起安裝進來了。它的路徑一般的在:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe //注意這裏是64位的

它就是讓不跨平臺的.Net Frameworker生成本地機器碼,然後執行。

2.用法

應該怎麼用它呢?
一:代碼
假如說你有以下.Net Frameworker代碼,項目名稱NgenDemo

static void Main(string[] args)
{
    Console.WriteLine("hello Ngen Call The Main Method");
    Console.ReadLine();
}

二.注意事項:
注意一:把VS裏的AnyCpu切換成X64
注意二:打開VS命令行工具,選擇64位的
注意三:要以管理員的身份運行64位VS命令行工具
三:生成
比如把以上NgenDemo這個項目放到桌面上。在Visual Studio裏面摁F5運行下,在目錄:

C:\Users\Administrator\Desktop\NgenDemo\bin\x64\Debug

下面會生成:NgenDemo.exe。
打開VS命令行工具:

x64 Native Tools Command Prompt for VS 2022  //注意這裏是64位的

運行如下命令: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>

可以看到映像已經生成了。
到目錄:

C:\Windows\assembly\NativeImages_v4.0.30319_64

裏面看到一堆文件,它就是生成本機映像,以及本機緩存。此後在本機運行的時候,可以直接雙擊NgenDemo.exe就可以運行了。
如果想要卸載本機映像,運行如下命令:

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生成的本機映像。它有極大的缺陷,每個機器上都要生成一次,其次它的程序集緩存不能合併到一起,需要C:\Windows\assembly路徑下的文件支持,才能夠運行。

所以後面微軟開啓了corert項目以及現在的nativeAOT項目,都是意圖取代它。


結尾

作者:江湖評談
歡迎關注我的公衆號(jianghupt),有更多精彩技術文章分享
image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章