SuperAPI AI 工具集

dotnet-trimming

通用与其它

查看项目

更新于 10-16 01:14

技能介绍

用途:帮助 .NET 8+ 应用与类库实现裁剪安全(trim-safe)开发,避免发布裁剪后因反射导致运行时缺失类型或成员。

主要能力:讲解裁剪注解 [RequiresUnreferencedCode]、[DynamicallyAccessedMembers]、[DynamicDependency]、[UnconditionalSuppressMessage];使用 ILLink 描述符 XML 保留类型/方法/程序集;用 TrimmerSingleWarn 获取逐条诊断;修复 IL2xxx(裁剪)与 IL3xxx(AOT)警告;以 IsTrimmable 编写类库。

MSBuild 属性区分:应用用 PublishTrimmed 在发布时裁剪、EnableTrimAnalyzer 启用分析器;类库用 IsTrimmable 声明裁剪安全并自动启用分析器,IsAotCompatible 声明 AOT 安全。类库不应设置 PublishTrimmed。

用法要点:调试时用 dotnet publish -c Release /p:PublishTrimmed=true /p:TrimmerSingleWarn=false 查看逐条警告;不发布时用 dotnet build /p:EnableTrimAnalyzer=true /p:TrimmerSingleWarn=false 分析。ILLink 描述符通过 <TrimmerRootDescriptor Include="ILLink.Descriptors.xml" /> 注册,整程序集保留可用 <TrimmerRootAssembly Include="LegacyLibrary" />。CI 可用 /warnaserror:IL2026,IL2057,IL2060,IL2067,IL2070,IL3050 作为门禁。

适用场景:发布裁剪自包含应用、类库作者标注公共 API、排查裁剪后 MissingMethodException/MissingMetadataException、为 AOT 做准备。

限制:不覆盖 Native AOT 发布管线、AOT 架构设计、WASM AOT、MAUI AOT、源生成器编写、序列化深度与容器部署,这些由其他技能处理。不要使用已被现代 .NET 静默忽略的 RD.xml;不要无验证地抑制警告;不要给不使用反射的方法添加 [RequiresUnreferencedCode],该注解会沿调用链传播。具体版本行为与完整 API 细节以官方文档为准。