好消息:NET 9 X86 AOT的突破 - 支持老旧Win7与XP环境

5e78a340113377820817f6d613d6dcc0.jpege419ceaaeb846910e55dc73966dffec2.jpeg

unsetunset引言unsetunset

随着技术的不断进步,微软的.NET框架在每次迭代中都带来了令人惊喜的新特性。在.NET 9版本中,一个特别引人注目的亮点是X86架构下的AOT( Ahead-of-Time)编译器的支持扩展,它允许开发人员将应用程序在编译阶段就优化为能够在老旧的Windows系统上运行,包括Windows 7和甚至Windows XP。这不仅提升了性能,也为那些依然依赖这些老平台的企业和个人开发者提供了新的可能性。

本文只在分享网友实践的一个成果,如有更多发现,欢迎投稿。

unsetunsetWin 7支持unsetunset

站长还未实践,但根据网友技术交流群分享信息可得,这是真的,下图是网友编译的Avalonia UI跨平台项目在Win 7非SP1环境运行效果截图:

11b507399412bd3bdff6793ff20dde05.png

左侧是程序运行界面,右侧是操作系统版本。

c2cbd52e66461b873b36f7bbab33aeab.jpeg b361b95ef846288789723beaa29cbb8d.png

Winform都可以 x86 aot运行..

a659dffcef8e3d03ca1738ce320dbbfd.png

unsetunsetXP支持(理论)unsetunset

XP存在理论上运行可能行,网友反馈XP还不能直接运行:

53b1a5ba4c5ca5250a64da909e771d22.png

XP需要链接YY-Thunks,参考链接:https://github.com/Chuyu-Team/YY-Thunks

fc8078013c6efb1bc9e2ed71678647e4.jpeg

有尝试成功的朋友可以联系站长完善这篇文章,另外大家可关注YY-Thunks这个ISSUE:https://github.com/Chuyu-Team/YY-Thunks/issues/66

5e54816462a863cc8fae9b872868d612.jpeg

unsetunset小知识分享unsetunset

  1. .NET 9 X86 AOT简介

.NET 9的X86 AOT编译器通过静态编译,将.NET应用程序转换为可以直接在目标机器上执行的可执行文件,消除了在运行时的JIT(Just-In-Time)编译所需的时间和资源。这对于对性能要求高且需要支持旧版系统的场景具有显著优势。

  1. 支持Win7与XP的背景

尽管Windows 7和XP已经不再是主流操作系统,但它们在某些特定领域,如企业遗留系统、嵌入式设备或者资源受限的环境中仍有广泛应用。.NET 9的AOT编译器的这一扩展,旨在满足这些场景的兼容性和性能需求。

  1. 如何实现

  • 编译过程优化:NET 9在AOT编译时,对代码进行了更为细致的优化,使得生成的可执行文件更小,启动速度更快。

  • 向下兼容性:通过精心设计的编译策略,确保了对Win7及XP API的兼容性,使代码能够无缝运行。

  • 安全性考量:虽然支持老旧系统,但.NET 9依然注重安全,提供了一定程度的保护机制以抵御潜在的风险。

  1. 实例应用与优势

  • 性能提升:AOT编译后的程序通常比JIT执行的程序更快,尤其对于CPU密集型任务。

  • 部署简易:无需用户安装.NET运行时,简化了部署流程。

  • 维护成本降低:对于依赖老旧系统的企业,避免了频繁升级运行时的困扰。

unsetunset结语unsetunset

.NET 9的X86 AOT支持无疑拓宽了.NET生态的应用范围,为那些需要在老旧平台上运行高性能应用的开发者提供了强大的工具。随着技术的发展,我们期待未来更多的.NET版本能够进一步打破界限,让编程变得更加灵活和高效。

感谢网友GSD分享的这个好消息,大石头这篇文章《各版本操作系统对.NET支持情况》推荐大家阅读:https://newlifex.com/tech/os_net

unsetunset技术交流unsetunset

软件开发技术交流添加QQ群:771992300

或扫站长微信(codewf,备注“加群”)加入微信技术交流群:

e8591f847adcb8310f89fd3f28b2eb49.jpeg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector at org.mybatis.spring.mapper.ClassPathMapperScanner.<init>(ClassPathMapperScanner.java:91) ~[mybatis-spring-3.0.2.jar:3.0.2] at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:363) ~[mybatis-spring-3.0.2.jar:3.0.2] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:142) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:748) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.7.12.jar:2.7.12] at com.lx.MybatisPlusApplication.main(MybatisPlusApplication.java:10) ~[classes/:na] Caused by: java.lang.ClassNotFoundException: org.springframework.aot.AotDetector at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] ... 13 common frames omitted
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值