SuperAPI AI 工具集

dotnet-multi-targeting

通用与其它

查看项目

更新于 10-16 01:27

技能介绍

用途:为 .NET 多目标框架(TFM)项目提供策略指导,采用 polyfill 优先的方式,在较低 TFM 上使用较新的 C# 语言特性、回填缺失的 BCL API、处理运行时行为差异,并校验跨 TFM 的 API 兼容性。该技能消费 dotnet-version-detection 的结构化输出(TFM、C# 版本、预览标志)。不涉及 TFM 检测逻辑、版本升级路线选择、平台专属 UI 框架(MAUI、Blazor)及云部署配置。

主要能力:提供决策矩阵,按缺口类型选择策略——语言/语法特性用 PolySharp 合成编译器属性与类型桩;BCL API 缺失优先用 SimonCropp/Polyfill,否则用 #if;运行时行为差异用条件编译或适配器模式;平台 API 差异用 #if 配合 [SupportedOSPlatform]。PolySharp 为源生成器,仅在编译期生成缺失类型,无运行时依赖,在原生支持时不生成任何代码;Polyfill 提供实际 BCL 实现(如 System.Threading.Lock、String.Contains 重载、LINQ 新增方法等)。两者可组合使用。

使用方式:在 .csproj 中设置 <TargetFrameworks> 与 <LangVersion>,通过 PackageReference 引入 PolySharp 与 Polyfill(PrivateAssets=all)。条件编译使用 NET8_0_OR_GREATER 等预处理器符号。大型 TFM 专属代码建议用独立源文件配合 <Compile Remove/Include> 条件包含,而非整文件 #if。多项目方案可在 Directory.Build.props 集中配置。发布 NuGet 包时启用 EnablePackageValidation 与 PackageValidationBaselineVersion,用 dotnet pack 触发校验,必要时生成 CompatibilitySuppressions.xml 做定向抑制,或用 Microsoft.DotNet.ApiCompat.Tool 在 CI 中独立校验。

适用场景:需要同时支持多个 TFM 的类库或应用,希望在旧 TFM 上使用新语法、减少重复代码并保证 API 表面一致。

限制:PolySharp 仅提供编译器桩,不回填运行时行为;需要运行时支持的特性(如 runtime-async、SearchValues<T> 硬件加速)无法 polyfill。部分 API 无 polyfill 时只能条件编译。具体版本号、价格与平台支持等资料未提供。