做网站买什么空间,网站快速收录的方法,wordpress static配置,wordpress没有找到站点引言
随着技术的不断进步#xff0c;微软的.NET 框架在每次迭代中都带来了令人惊喜的新特性。在.NET 9 版本中#xff0c;一个特别引人注目的亮点是 AOT#xff08; Ahead-of-Time#xff09;支持#xff0c;它允许开发人员将应用程序在编译阶段就优化为能够在老旧的 Win… 引言
随着技术的不断进步微软的.NET 框架在每次迭代中都带来了令人惊喜的新特性。在.NET 9 版本中一个特别引人注目的亮点是 AOT Ahead-of-Time支持它允许开发人员将应用程序在编译阶段就优化为能够在老旧的 Windows 系统上运行包括 Windows 7 和甚至 Windows XP。这不仅提升了性能也为那些依然依赖这些老平台的企业和个人开发者提供了新的可能性。
小知识普及
NET 9 AOT 简介
.NET 9 的 AOT 编译器通过静态编译将.NET 应用程序转换为可以直接在目标机器上执行的可执行文件消除了在运行时的 JITJust-In-Time编译所需的时间和资源。这对于对性能要求高且需要支持旧版系统的场景具有显著优势。
支持 Windows 7 与 Windows XP 的背景
尽管 Windows 7 和 XP 已经不再是主流操作系统但它们在某些特定领域如企业遗留系统、嵌入式设备或者资源受限的环境中仍有广泛应用。.NET 9 的 AOT 编译这一扩展旨在满足这些场景的兼容性和性能需求。
如何实现
编译过程优化NET 9 在 AOT 编译时对代码进行了更为细致的优化使得生成的可执行文件更小启动速度更快。向下兼容性通过精心设计的编译策略确保了对 Win7 及 XP API 的兼容性使代码能够无缝运行。安全性考量虽然支持老旧系统但.NET 9 依然注重安全提供了一定程度的保护机制以抵御潜在的风险。
实例应用与优势
性能提升AOT 编译后的程序通常比 JIT 执行的程序更快尤其对于 CPU 密集型任务。部署简易无需用户安装.NET 运行时简化了部署流程。维护成本降低对于依赖老旧系统的企业避免了频繁升级运行时的困扰。
本文只在分享网友及站长实践的一个成果如有更多发现欢迎投稿或给本文PR。
Windows 7 支持
下图是网友编译的 Avalonia UI 跨平台项目在 Win 7 非 SP1 环境运行效果截图 如上图左侧是程序运行界面右侧是操作系统版本。 为了便于读者代码拷贝参考配置贴出如下
Project SdkMicrosoft.NET.SdkPropertyGroupOutputTypeWinExe/OutputTypeTargetFrameworknet9.0-windows/TargetFrameworkNullableenable/NullableBuiltInComInteropSupporttrue/BuiltInComInteropSupportApplicationManifestapp.manifest/ApplicationManifestAvaloniaUseCompiledBindingsByDefaulttrue/AvaloniaUseCompiledBindingsByDefaultPublishAottrue/PublishAot/PropertyGroupPropertyGroup Condition$(Configuration)|$(Platform)Release|AnyCPUInvariantGlobalizationtrue/InvariantGlobalization!--支持在Windows XP或更高版本的Windows操作系统上运行,XP下尝试Ava失败--WindowsSupportedOSPlatformVersion5.1/WindowsSupportedOSPlatformVersionRuntimeIdentifierwin-x64/RuntimeIdentifierTargetPlatformMinVersion5.1/TargetPlatformMinVersion/PropertyGroupItemGroupPackageReference IncludeVC-LTL Version5.1.1-Beta3 //ItemGroupItemGroupPackageReference IncludeAvalonia Version11.1.1 /PackageReference IncludeAvalonia.Desktop Version11.1.1 /PackageReference IncludeAvalonia.Themes.Fluent Version11.1.1 /PackageReference IncludeAvalonia.Fonts.Inter Version11.1.1 /!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.--PackageReference Condition$(Configuration) Debug IncludeAvalonia.Diagnostics Version11.1.1 /PackageReference IncludeAvalonia.ReactiveUI Version11.1.1 //ItemGroup
/Project
上面关键配置说明
PublishAottrue/PublishAot
该开关用于支持AOT编译发布
WindowsSupportedOSPlatformVersion5.1/WindowsSupportedOSPlatformVersion
支持在Windows XP或更高版本的Windows操作系统上运行
VC-LTL
VC-LTL是一个基于微软VC修改的开源运行时有效减少应用程序体积并摆脱微软运行时DLL比如msvcr120.dll、api-ms-win-crt-time-l1-1-0.dll等依赖。
Win7及以上版本可能AOT就能正常运行不需要安装.NET运行时。但也有可能在目标系统运行失败可添加该库尝试重新AOT编译。详细原理参考该仓库https://github.com/Chuyu-Team/VC-LTL
经站长实测Windows7可能还需要添加YY-Thunks包引用
PackageReference IncludeYY-Thunks Version1.1.4-Beta3 /
关于YY-Thunks链接说明 众所周知从 Windows 的每次更新又会新增大量 API这使得兼容不同版本的 Windows 需要花费很大精力。导致现在大量开源项目已经不再兼容一些早期的 Windows 版本比如 Windows XP RTM。 难道就没有一种快速高效的方案解决无法定位程序输入点的问题吗 YY-Thunks鸭船存在的目的就是抹平不同系统的差异编译时单纯添加一个 obj 即可自动解决这些兼容性问题。让你兼容旧版本 Windows 更轻松 经测试Winform 可以.NET 9 x86 AOT发布后运行效果截图如下 Winform 工程配置如下 可拷贝配置如下
Project SdkMicrosoft.NET.SdkPropertyGroupOutputTypeWinExe/OutputTypeTargetFrameworknet9.0-windows/TargetFrameworkNullableenable/NullableUseWindowsFormstrue/UseWindowsFormsImplicitUsingsenable/ImplicitUsings/PropertyGroupPropertyGroup Condition$(Configuration)|$(Platform)Release|AnyCPUInvariantGlobalizationtrue/InvariantGlobalizationWindowsSupportedOSPlatformVersion5.1/WindowsSupportedOSPlatformVersionRuntimeIdentifierwin-x64/RuntimeIdentifierTargetPlatformMinVersion5.1/TargetPlatformMinVersionPublishAottrue/PublishAot_SuppressWinFormsTrimErrortrue/_SuppressWinFormsTrimError/PropertyGroupItemGroupPackageReference IncludeVC-LTL Version5.1.1-Beta3 /PackageReference IncludeWinFormsComInterop Version0.5.0 //ItemGroup
/Project
入口再加一句代码ComWrappers.RegisterForMarshalling(WinFormsComInterop.WinFormsComWrappers.Instance);
using System.Runtime.InteropServices;namespace WinFormsAotDemo;internal static class Program
{/// summary/// The main entry point for the application./// /summary[STAThread]static void Main(){// To customize application configuration such as set high DPI settings or default font,// see https://aka.ms/applicationconfiguration.ComWrappers.RegisterForMarshalling(WinFormsComInterop.WinFormsComWrappers.Instance);ApplicationConfiguration.Initialize();Application.Run(new Form1());}
}
Windows XP 支持
目前测试可运行控制台程序 网友得出结论 XP 需要链接 YY-Thunks参考链接https://github.com/Chuyu-Team/YY-Thunks前面有提及Win7如果失败也可以添加该包引用尝试 大家可关注 YY-Thunks 这个 ISSUEhttps://github.com/Chuyu-Team/YY-Thunks/issues/66 控制台支持 XP 的工程配置如下 Project SdkMicrosoft.NET.SdkPropertyGroupOutputTypeExe/OutputTypeTargetFrameworknet9.0/TargetFrameworkImplicitUsingsenable/ImplicitUsingsNullableenable/Nullable/PropertyGroupPropertyGroup Condition$(Configuration)|$(Platform)Release|AnyCPUInvariantGlobalizationtrue/InvariantGlobalizationWindowsSupportedOSPlatformVersion5.1/WindowsSupportedOSPlatformVersionSupportWinXPtrue/SupportWinXPPublishAottrue/PublishAot/PropertyGroupItemGroupPackageReference IncludeVC-LTL Version5.1.1-Beta3 //ItemGroup
/Project
网友心得 有待加强的部分
经测试Prism框架使用会报错 使用HttpClient也会出错 2024-08-02 通过阅读开源Avalonia主题库 [Semi.Avalonia](irihitech/Semi.Avalonia: Avalonia theme inspired by Semi Design (github.com)) 的源码及作者 Rabbitism 兔佬的PR已经解决Prism问题的其它库问题使用方法应该类似修改如下 主工程添加Roots.xml内容如下 linkerassembly fullnameCodeWF.Toolbox.Desktop preserveAll/assembly fullnameUrsa.PrismExtension preserveAll /assembly fullnamePrism preserveAll /assembly fullnameDryIoc preserveAll /assembly fullnamePrism.Avalonia preserveAll/assembly fullnamePrism.DryIoc.Avalonia preserveAll/assembly fullnameCodeWF.Toolbox preserveAll /
/linker主工程添加该XML配置 ItemGroupTrimmerRootDescriptor IncludeRoots.xml /
/ItemGroupHttpClient也是类似的处理方法这里不赘述需要你进行更多尝试。 每个公司的不同项目都是极其不同、复杂的实际发布还需要不断测试为了支持Windows7、Windows XP可能不得不做出使用库替换、部分API使用取舍等操作欢迎读者将使用过程中的心得体会进行分享。
结语 .NET 9 的 AOT 支持无疑拓宽了.NET 生态的应用范围为那些需要在老旧平台上运行高性能应用的开发者提供了强大的工具。随着技术的发展我们期待未来更多的.NET 版本能够进一步打破界限让编程变得更加灵活和高效。 感谢网友GSD及M$達分享的这个好消息大石头这篇文章《各版本操作系统对.NET 支持情况》推荐大家阅读https://newlifex.com/tech/os_net
参考AOT项目https://github.com/dotnet9/CodeWF.Toolbox
参考文章.NET 9 AOT的突破 - 支持老旧Win7与XP环境 - 码界工坊
如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。