让.NET 8 Native AOT应用兼容Windows 7/Vista

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

本文介绍了编译兼容Windows Vista RTM的.NET Native AOT应用的方法,包括调整TFM的OS为Windows,安装YY-Thunks v1.0.10-Beta3预览版和VC-LTL v5.0.10-Beta2或更高版本。提供了兼容原理的参考链接。

🔎

延伸解读

兼容旧系统的关键依赖

要让 .NET 8 Native AOT 应用在 Windows 7 或 Vista 上运行,核心是使用 YY-Thunks 和 VC-LTL。YY-Thunks 提供了新 API 的兼容实现,而 VC-LTL 则简化了 CRT 运行库的部署。注意,VC-LTL 会自动依赖 YY-Thunks,因此安装 VC-LTL 后无需单独安装 YY-Thunks。

目标框架与平台版本设置

必须将目标框架设置为 net8.0-windows,因为 YY-Thunks 是 .net8.0-windows 下的包。若需兼容 Windows XP RTM,还需在项目文件中添加 <SupportedOSPlatformVersion>5.1</SupportedOSPlatformVersion>。这些设置是编译兼容旧系统应用的前提。

预览版包的使用与版本要求

YY-Thunks 需要 v1.0.10-Beta3 或更高版本,且需在 NuGet 管理器中勾选“包括预发行版”才能搜索到。VC-LTL 则需要 v5.0.10-Beta2 或更高版本。由于是预览版,未来可能有更新,但版本号不应低于指定版本。

兼容原理与实现思路

兼容性主要参考了微软的 Microsoft.NETCore.Native.Windows.targets 文件,其中 AdditionalNativeLibraryDirectories 用于添加库搜索目录,LinkerArg 则直接传递给链接器。这些处理在 SetupOSSpecificProps Task 中完成,理论上可以在该 Task 之前进行干预以实现兼容。

❓

Q&A

如何编译兼容Windows Vista的.NET Native AOT应用?

将TFM的OS调整为Windows,并安装YY-Thunks v1.0.10-Beta3。

安装YY-Thunks v1.0.10-Beta3的步骤是什么?

右键项目,选择管理NuGet程序包,勾选包括预发行版,搜索并安装YY-Thunks v1.0.10-Beta3。

如何使.NET Native AOT应用兼容Windows XP?

在TargetFramework后添加<SupportedOSPlatformVersion>5.1</SupportedOSPlatformVersion>。

VC-LTL的作用是什么?

VC-LTL简化了CRT运行库的部署,并支持.NET Native AOT应用。

YY-Thunks和VC-LTL之间有什么关系?

VC-LTL会自动依赖YY-Thunks,安装VC-LTL时无需单独安装YY-Thunks。

兼容性问题的解决方案来源于哪里?

感谢stevefan1999-personal等人提供的方案和思路。

🏷️

标签

➡️

继续阅读