用途:为 .NET 项目在多个目标框架(TFM)间共享代码提供策略指导,消费 dotnet-version-detection 的结构化输出(TFM、C# 版本、预览标志),给出语言特性回移、运行时差异处理与 API 兼容性验证的可操作建议。
主要能力:提供 polyfill 与条件编译的决策矩阵;介绍 PolySharp(编译器合成属性/类型桩,如 required、init、IsExternalInit,纯编译期、无运行时依赖)与 SimonCropp/Polyfill(BCL API 回移,如 System.Threading.Lock、String.Contains、LINQ 新增方法);讲解基于 TFM 的预处理器符号(NET8_0_OR_GREATER 等)与 #if 适用场景;多目标 .csproj 模式、TFM 专属源文件、条件包引用、Directory.Build.props 集中配置;API 兼容性校验(EnablePackageValidation、PackageValidationBaselineVersion、ApiCompat 工具、CompatibilitySuppressions.xml)。
使用方式:在 csproj 中设置 TargetFrameworks 与 LangVersion,通过 PackageReference 引入 PolySharp 和/或 Polyfill(PrivateAssets=all);用 #if 处理运行时行为差异或平台 API;用 dotnet pack 触发校验,或安装 Microsoft.DotNet.ApiCompat.Tool 后运行 apicompat --left-assembly ... --right-assembly ...。
适用场景:类库多 TFM 发布、需要在新旧框架间复用新语法与 BCL API、NuGet 包 API 表面一致性校验。
限制:PolySharp 仅提供编译器桩,不回移运行时行为;需运行时支持的特性(如 runtime-async、SearchValues 硬件加速)无法 polyfill;平台专属 UI 框架、云部署配置不在范围内;TFM 检测与升级路线分别见其他技能。