You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI发布Android应用因链接阶段失败求解决方案

解决.NET MAUI发布Android时SkiaSharp裁剪错误的方案

你遇到的是ILLink在处理SkiaSharp.Views.Android.dll时的元数据引用错误,核心原因是裁剪工具无法正确处理跨模块的成员引用。以下是几个无需禁用裁剪的解决方案:

方案1:直接保留SkiaSharp相关程序集

之前的配置仅保留了LiveChartsCore.SkiaSharpView.Maui,但问题出在SkiaSharp.Views.Android本身,需要将相关SkiaSharp程序集加入裁剪根目录:

<PropertyGroup>        
    <EnableTrimAnalyzer>true</EnableTrimAnalyzer>
    <PublishTrimmed>true</PublishTrimmed>
    <TrimMode>partial</TrimMode>
</PropertyGroup>

<ItemGroup>
    <TrimmerRootAssembly Include="LiveChartsCore.SkiaSharpView.Maui" />
    <!-- 添加以下两行 -->
    <TrimmerRootAssembly Include="SkiaSharp" />
    <TrimmerRootAssembly Include="SkiaSharp.Views.Android" />
</ItemGroup>

这样会让ILLink完全跳过对这些程序集的裁剪处理,避免触发元数据错误。

方案2:精确保留特定类型(更优,减少包体积)

如果不想保留整个程序集,可以通过裁剪描述文件精确保留出错的类型:

  1. 在项目根目录创建TrimmerRoots.xml文件,内容如下:
<linker>
    <assembly fullname="SkiaSharp.Views.Android">
        <!-- 保留出错的SKCanvasView类型及其所有成员 -->
        <type fullname="SkiaSharp.Views.Android.SKCanvasView" preserve="all" />
    </assembly>
</linker>
  1. 在csproj中引用该描述文件:
<PropertyGroup>        
    <EnableTrimAnalyzer>true</EnableTrimAnalyzer>
    <PublishTrimmed>true</PublishTrimmed>
    <TrimMode>partial</TrimMode>
</PropertyGroup>

<ItemGroup>
    <TrimmerRootDescriptor Include="TrimmerRoots.xml" />
    <TrimmerRootAssembly Include="LiveChartsCore.SkiaSharpView.Maui" />
</ItemGroup>

这种方式只会保留必要的类型,相比保留整个程序集能更好地控制最终包体积。

方案3:升级依赖库版本

你使用的是.NET 7 Preview 2,属于早期预览版,SkiaSharp或LiveCharts可能存在适配裁剪工具的兼容性问题。尝试将SkiaSharp和LiveChartsCore.SkiaSharpView.Maui升级到适配.NET 7的稳定版本,大概率能解决底层的元数据引用问题。

内容的提问来源于stack exchange,提问作者NPadrutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:25:39