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

使用Visual Studio 2019 16.10+版本构建的已发布Xamarin UWP应用启动崩溃

问题原因与修复方案

根本原因

该异常是VS 2019 16.10+版本更新后,Windows Application Packaging Project(WAPP)的默认打包逻辑变更导致的:打包时会将UWP项目的引用程序集同时输出到Appx根目录和UWP项目同名子目录下,Xamarin.Forms初始化时自动扫描所有程序集,碰到两份标识完全相同的SkiaSharp相关程序集,触发ambiguous match found歧义匹配异常。

排查验证步骤

  • 把生成的.appxbundle文件后缀改为.zip后解压,进入Appx目录
  • 检查是否存在两份相同的SkiaSharp.dll、HarfBuzzSharp.dll、SkiaSharp.Views.Forms.dll等文件,一份在根目录,一份在子目录中,确认重复即可定位问题

可用修复方案

方案1:修改WAPP项目打包配置

  1. 右键WAPP项目,选择「卸载项目」,再次右键选择「编辑项目文件」
  2. 在文件顶部第一个<PropertyGroup>节点中添加以下2行配置:
<DisableProjectReferenceOutputRedirection>true</DisableProjectReferenceOutputRedirection>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  1. 保存后重新加载项目,清理解决方案后重新打包即可

方案2:手动指定Xamarin.Forms初始化扫描的程序集

跳过Xamarin.Forms自动扫描所有程序集的逻辑,手动传入需要注册的程序集,修改UWP项目中App.xaml.cs里的初始化代码:

// 引入命名空间
using System.Reflection;
using System.Collections.Generic;
using SkiaSharp.Views.Forms;
using SkiaSharp.Views.UWP;

// 替换原有的Xamarin.Forms.Forms.Init(e)代码
var assembliesToInclude = new List<Assembly>
{
    typeof(SKCanvasView).GetTypeInfo().Assembly,
    typeof(SKCanvasViewRenderer).GetTypeInfo().Assembly
    // 若有其他第三方Xamarin.Forms控件,也可以在此处添加对应程序集
};
Xamarin.Forms.Forms.Init(e, assembliesToInclude);

方案3:升级依赖版本

将Xamarin.Forms升级到5.0.0.2291及以上版本,同时将SkiaSharp相关Nuget包升级到2.88.0及以上版本,两个包的高版本均已适配VS新版打包逻辑,可直接解决冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:45:03