首页 > 其他分享 >.Net FrameWork下面如何生成AOT呢?

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

时间:2023-07-15 12:34:22浏览次数:35  
标签:bin exe x64 Desktop FrameWork AOT Debug Net NgenDemo

前言

其实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

标签:bin,exe,x64,Desktop,FrameWork,AOT,Debug,Net,NgenDemo
From: https://www.cnblogs.com/tangyanzhi1111/p/17550186.html

相关文章

  • 将gephi文件导入到networkx中使用
    最近基于Transbigdata库编写代码获取了某市轨道交通网络的邻接表及shp文件,并使用Gephi对轨道交通网络进行了可视化处理,之后想尝试一下把Gephi的成果快捷地转为networkx格式来计算各种指标,编写了一些代码,步骤如下:1.将gephi成果导出打开gephi文件后点击文件—输出—图表文件选择......
  • 推荐一款.NET开源的轻量级分布式服务框架
    前言今天要给大家推荐一款由新生命开发团队开源的.NET轻量级分布式服务框架:星尘分布式平台(NewLife.Stardust)。项目介绍星尘是一个轻量级分布式服务框架。它的功能包含配置中心、集群管理、远程自动发布、服务治理、服务自动注册和发现、负载均衡、动态伸缩、故障转移、性能监控......
  • kubernetes之 认证和serviceaccount
    第十部分认证和serviceaccount前面讲的都是admin超级用户在操作k8s,Kubectl不能所有人都可以使用和访问。用户访问逻辑图,认证:第一种令牌认证token,最简单的认证,(只需要对方认证的共享密钥即可)服务器需要认可客户端的证书。授权:RBAC,基于角色的访问控制,目前用的比较多。    ......
  • 基于ASP.NET学生故障管理系统
    系统功能模块设计1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。2.系统用户管理:不管是超级管理员还是普通管理员都需要管理系统用户,包括普通管理员的添加、删除、修改、查询,修改......
  • kubernetes之 statefulset控制器
    第九部分statefulset控制器参考:https://blog.csdn.net/styshoo/article/details/73731993     https://blog.51cto.com/xuexinhuan/5424144即便是有状态管理,也需要使用脚本来运维。CoreOS:OperatorStatusfulSet:有状态Cattle,petPetSet->StatefulSeta、稳定......
  • TryHackMe | Skynet
    TryHackMe|Skynet信息收集nmap枚举,139/445端口开放,可知目标机开启了SMB服务dirsearch扫描Task1Deployandcompromisethevulnerablemachine!枚举SMB共享smbclient-L\\ip或者输入enum4linux-S$ip 密码那里直接按回车就行获取到一些可能能访问的SMB服......
  • Json.NET反序列化漏洞生成Ysoserial攻击Payload
    Ysoserial.Net只提供序列化之后的Payload主体,具体执行的命令从外部输入,实现代码清单如下Stringpayload=@"{    '$type':'System.Windows.Data.ObjectDataProvider,PresentationFramework,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35',  ......
  • kubernetes网络模式
     一个K8s的集群中至少有三个网络:集群节点所在的网络,这个网络就是你的主机所在的网络,通常情况下是你的网络基础设施提供。如果你的node处于不同的网段,那么你需要保证路由可达。如上图中的192.168.10.0/24和10.0.0.0/8这两个网络第二个网络是Pod的网络,K8s中一个Pod由多个......
  • Ubuntu部署Kubernetes
    Docker安装信任Docker的GPG公钥:curl-fsSLhttps://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd-`添加软件仓库:sudoadd-apt-repository"deb[arch=amd64]https://repo.huaweicloud.com/docker-ce/linux/ubuntu$(lsb_release-cs)stable"......
  • Oracle学习笔记:parallel并行处理 --转载 https://blog.csdn.net/w892824196/article/
    在使用oracel查询时,可以通过并行提高查询速度。例如:select/*+parallel(a,6)*/count(1)fromtable_namea;强行启用并行度来执行当前SQL。加上这个说明之后,可以强行启用Oracle的多线程处理功能,提高效率。但本身启动这个功能,也是要消耗资源与性能的。所有,一般都会在返回记......